문제11개의 각 포지션마다 가치가 가장 높은 선수를 뽑아 팀을 구성했을 때, k 년 뒤에 뽑힌 선수들의 가치의 합을 구하는 문제이다.포지션에 해당하는 선수가 없다면 공석으로 두며,8월에 뽑힌 선수들에 한해서 가치가 1씩 감소하고, 가치는 0보다 작아지진 않는다.11월에 다시 가치가 높은 선수들을 뽑은 뒤, 12월에 선수들의 가치의 합을 측정한다.풀이heap을 사용하여 각 포지션마다 가장 큰 가치를 쉽게 뽑아낼 수 있다.heapq는 가장 작은 숫자를 0번째 인덱스에 저장하는 특징을 갖고 있다. 따라서 가치를 음수로 넣어 가장 큰 수를 쉽게 얻을 수 있다.포지션에 따른 선수 정보를 입력한다.빈 포지션이 있을 수 있음으로 0으로 초기화를 한다.heapq를 사용하여 선수의 가치를 음수로 저장한다.8월에는 가치가..
문제마을에는 N개의 집이 순서대로 원 형태로 서로 이웃해 있다. 각 집에는 돈이 보관되어 있으며, 이 돈의 양은 숫자로 표시된다. 도둑은 M개의 연속된 집에서 돈을 훔치기로 하였고, 만약 도둑이 훔친 돈의 총액이 K원 이상이 되면 방범장치가 작동하여 붙잡히게 된다. 따라서 도둑이 붙잡히지 않고 무사히 마을을 빠져나가기 위해 돈을 훔칠 M개의 연속된 집을 선택하는 방법의 수를 구해야 한다. 풀이이 문제에서 중요한 점은 집들이 원 형태로 이웃했다는 점이다.원의 형태이기 때문에 위 그림의 오른쪽 이미지들처럼 7번 집을 지나 0번 집까지 연속으로 돈을 훔치는 것이 가능하다.도둑질을 시작하는 집을 기준으로 0부터 n-1까지 m칸씩 합계를 구해, 방범 장치가 울리지 않는 크기가 총 몇 가지 있는지 구하면 된다.주의..
앞선 글에서 아래한글(hwp) 문서를 읽는 방법을 살펴보았다. [Python] Colab에서 아래한글(hwp) 문서 읽기 Colab을 사용해 아래한글 문서를 받아 엑셀로 정리하는 작업을 하려고 한다. 윈도우에서 한글 문서를 다루는 패키지로 pyhwp가 있지만, Colab에서는 리눅스 OS를 사용하기 때문에 pyhwp로 아래한글 문 code-angie.tistory.com 이번에는 학술대회 참가신청서를 예시로 한글 문서를 읽고, 데이터를 뽑아내 엑셀화 하는 작업을 하려고 한다. text를 split을 통해 나누고 replace를 통해 정제하는 정도만 알고 있어도 쉽게 할 수 있는 작업이다. 1. 패키지 불러오기 # 별도 설치가 필요한 패키지는 설치를 해준다. !pip install olefile impor..
Colab을 사용해 아래한글 문서를 받아 엑셀로 정리하는 작업을 하려고 한다. 윈도우에서 한글 문서를 다루는 패키지로 pyhwp가 있지만, Colab에서는 리눅스 OS를 사용하기 때문에 pyhwp로 아래한글 문서를 읽기가 쉽지 않았다. (exe 파일을 사용해서 그렇다고 본 것 같다.) 다행히 olefile 패키지를 사용하여 아래한글 문서를 바로 txt 문서로 변환하여 읽어 올 수 있는 방법을 찾았다. 1. olefile 패키지 설치 pip install olefile 2. 아래한글 문서 열기 import olefile path = "/content/file_name.hwp" f = olefile.OleFileIO(path) 3. 아래한글 문서 디코딩하기 기본적인 틀은 openstream 함수로 문서의 내..
사무 보조 알바를 하다보니 반복되는 작업이 많아 자동화를 시도해보게 되었다. word 문서는 python-docx 패키지를 통해 쉽게 다룰 수 있다. 간단하게 문서 내 글을 읽고, 쓰는 방법을 정리해 보았다. 1. python-docx 설치 word 문서를 다루기 위해 python-docx 패키지를 설치한다. 이 패키지는 Colab에서도 잘 돌아간다. pip install python-docx 2. word 문서 불러오기 from docx import Document path = "/content/file_name.docx" doc = Document(path) 3. Paragraphs 3.1. 문단 읽기 paragraphs 함수를 통해 word 문서 내 모든 문단을 확인할 수 있다. 하지만 표는 확인이..
문제 n이 주어졌을 때, n번째 피보나치 수를 구하는 문제이다. 이 문제의 조건은 다음과 같다. 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그다음 2번째부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다. 예를 들어, n=17일 때까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 풀이 피보나치 수는 특정 숫자로 나누었을 때 나머지가 항상 주기를 갖는다는 특징이 있다. 이를 피사노 주기(Pisano Period)라고 한다. 예를 들어 피보나치 수를 4로 나누었을 때 나머지..
문제두 별 사이의 거리만큼 별자리를 만는 비용이 든다고 할 때,n개의 별들을 이어 별자리를 만드는 최소 비용을 구하는 문제이다.별자리의 조건두 별 사이의 거리는 서로 다른 두 별을 일직선으로 이은 선의 길이와 같다.모든 별은 직/간접적으로 연결되어 있다.풀이두 별 사이의 거리를 가중치로 두고, 크루스칼 알고리즘을 이용하여 최소 비용을 구한다.직각 삼각형의 대각선의 길이를 구하는 공식을 이용하여 가중치를 구한다.$c^2 = a^2 + b^2 $ $c = \sqrt{{a}^2 + {b}^2}$ $c = \sqrt{(x1-x2)^2 + (y1-y2)^2}$가중치와 두 별의 번호를 간선 list 에 저장한다.가중치를 기준으로 오름차순으로 간선 list를 정렬한다.작은 가중치부터 순서대로 별들을 연결한다. (부모..