[Python] 백준/BOJ 8958번: OX퀴즈
·
Algorithm/백준 (BOJ)
문제 링크 https://www.acmicpc.net/problem/8958 문제 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다. "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오. 풀이 OX 퀴즈의 결과를 하나의 문자열로 입력받아 반복문을 돌렸다. cnt는 해당 문제의 점수이고, score는 전체 합산 점수이다. O이면 cnt에 +1을 하여 계속 O가 나오면 점수가 1점, 2점, 3점 이런 식으로 점점 오르도록 하였다. 해..
[node.js] multer 파일 업로드 Unexpected field 에러
·
Library & Runtime/Node.js
🚨 문제상황multer를 이용하여 파일을 업로드하는 코드를 실행하니 다음과 같은 에러가 떴다.MulterError: Unexpected field at wrappedFileFilter (D:\study\node_modules\multer\index.js:40:19) at Busboy. (D:\study\node_modules\multer\lib\make-middleware.js:115:7) at Busboy.emit (node:events:520:28) at Busboy.emit (D:\study\node_modules\busboy\lib\main.js:38:33) at PartStream. (D:\study\node_modules\busboy\lib\types\multipart.js..
분할 정복 알고리즘
·
Algorithm/이론
분할 정복(Divide-and-Conquer) 알고리즘이란 주어진 문제의 입력을 분할하여 문제를 해결(정복)하는 방식의 알고리즘이다. 분할한 입력에 대하여 동일한 알고리즘을 적용하여 해를 계산하며, 이들의 해를 취합하여 원래 문제의 해를 얻는다. 분할된 입력에 대한 문제를 부분 문제(subproblem)라고 하고, 부분 문제의 해를 부분해라고 한다. 부분 문제는 더 이상 분할할 수 없을 때까지 계속 분할한다. 분할 횟수: log₂n 일반적으로 부분 문제들의 해를 취합하여 큰 부분 문제의 해를 구한다. 합병 정렬 (Merge Sort) 입력이 2개의 부분 문제로 분할, 부분문제의 크기가 ½로 감소하는 분할 정복 알고리즘이다. - 합병 정렬 알고리즘 MergeSort(A,p,q) 입력: A[p]~A[q] 출..
자료구조 복습
·
Algorithm/이론
자료구조란 자료를 효율적으로 사용하기 위해 자료를 조직화한 것이다. 구조 정의, 삽입 동작, 삭제 동작 등을 정의해야 한다. 자료구조의 종류 선형 자료구조 배열(array), 연결 리스트(linked list) 스택(stack), 큐(queue) 비선형 자료구조 트리(tree), 그래프(graph) 순차 자료구조 자료들의 논리적 순서와 물리적 순서가 일치한다. 배열('같은 자료형'을 가진 자료들을 메모리에 연속적으로 저장하는 방식)의 삽입과 삭제를 사용한다. 연결 자료구조 배열이 가지는 메모리 사용의 비효율성을 해결한다. 연결 리스트(다음 자료의 위치를 자료가 가지고 있는 방식, 노드와 링크로 구성)를 사용한다. typedef struct _node { int key; // 정수형 key 필드를 사용하여..
알고리즘을 배우기 위한 준비
·
Algorithm/이론
알고리즘이란 문제를 해결하는 단계적 절차 또는 방법이다. 알고리즘에는 입력이 주어지고, 알고리즘은 수행한 결과인 해(또는 답)를 출력한다. 알고리즘의 특성 정확성: 알고리즘은 주어진 입력에 대해 올바른 해를 주어야 한다. (안정적 정확성) 수행성: 알고리즘의 각 단계는 컴퓨터에서 수행 가능하여야 한다. (잘 정의된 동작 명령) 유한성: 알고리즘은 일정한 시간 내에 종료되어야 한다. 효율성: 알고리즘은 효율적일수록 그 가치가 높아진다. 최초의 알고리즘 가장 오래된 알고리즘은 기원전 300년경 유클리드(Euclid)의 최대공약수 알고리즘이다. 유클리드 호제법이라고도 부른다. - 유클리드의 최대공약수 알고리즘 2개의 자연수의 최대공약수는 큰 수에서 작은 수를 뺀 수와 작은 수와의 최대공약수와 같다는 성질을 이..
알고리즘 들어가기
·
Algorithm/이론
알고리즘이란 문제를 해결하기 위한 단계적인 절차를 의미한다. 주어진 문제에 여러 종류의 알고리즘이 있을 수 있으나, 보다 효율적인 알고리즘을 고안하는 것이 매우 중요하다. 1. 최대 숫자 찾기 mission: 다음 카드들 중에 가장 큰 숫자를 찾는다. - 순차 탐색 (Sequential Search) 카드를 한 장씩 차례대로 읽어 가며 찾는 방법이다. 2. 임의의 숫자 찾기 mission: 다음 카드들 중에 임의의 숫자(ex. 85)를 찾는다. - 순차 탐색 (Sequential Search) - 이진 탐색 (Binary Search) 오름차순으로 정렬된 데이터를 반으로 나누고, 나누어진 반을 다시 반으로 나누고, 이 과정을 반복하여 원하는 데이터를 찾는 탐색 알고리즘이다. 3. 동전 거스름돈 missi..
[LeetHub] 릿코드 풀이 깃허브에 자동 업로드하기
·
DevOps/Git
백준 문제만 풀다가 학교 선배께서 릿코드를 추천해주셔서 릿코드에서 문제를 풀게 되었다. 릿코드에는 자체 IDE가 있기에 웹에서 바로 문제를 풀고 있다. 그래서 깃허브에 업로드할 때 새로운 파일을 만들고 코드를 복붙해서 업로드해야 한다는 귀찮음이 있다. 릿허브를 사용하면 그 귀찮음을 해결할 수 있다! 릿허브는 릿코드에서 문제를 맞히면 자동으로 깃허브에 코드를 업로드하는 크롬 확장 프로그램이다. 릿허브를 사용하면 단순히 코드만 업로드해주는 것이 아니라 README에 문제 내용을 업로드해주고 시간과 메모리를 커밋해준다. LeetHub 설치https://chrome.google.com/webstore/detail/leethub/aciombdipochlnkbpcbgdpjffcfdbggi 해당 링크에 들어가면 다음..
[GitHub] 깃허브 사용법 - 리포지토리 생성, 로컬 저장소 연결, 코드 업로드
·
DevOps/Git
코딩을 공부한다면 깃허브 사용은 필수이다. 나는 오늘 아침도 기억이 잘 안나는 사람이기 때문에 내 식대로 정리하고 리포지토리 새로 생성할 때마다 따라 하려고 한다...^^ 참고로 이번 편에서는 개인이 공부한 코드를 업로드하기 위한 용도이므로 브랜치는 생성하지 않을 것이다. 나는 아직 협업에서 깃허브를 사용해본 적이 없지만 협업할 때 보통 브랜치를 따서 사용한다고 한다. 가입 및 설치는 완료가 된 상태이고, 리포지토리 생성 및 로컬 저장소와 연결, 코드 업로드 과정만 설명한 글이다. Repository 생성Respositories > New를 누르면 다음과 같은 창이 나온다. Repository name칸에 리포지토리 이름을 작성하고 'Add a README file'을 체크한다.Create reposit..