문제주어진 구간이 팰린드롬인지 빠르게 판단해 1 혹은 0을 출력하는 문제이다.풀이DP를 사용해 각 구간이 팰린드롬인지 미리 계산하면, 명우의 질문에 대한 답을 빠르게 구할 수 있다.길이가 1인 경우: 모든 숫자는 무조건 팰린드롬이다.길이가 2인 경우: 두 숫자가 같은 경우만 팰린드롬이다.길이가 3 이상인 경우: 양 끝의 두 숫자가 같고, 내부 숫자들이 팰린드롬일 때만 팰린드롬이 성립한다.팰린드롬의 길이가 3인 경우부터 차례로 DP를 사용해 팰린드롬 여부를 계산하면, 내부 구간을 비교할 수 있다.이후 a에서 b까지의 구간에 대해 DP 테이블을 참조해 팰린드롬 여부를 빠르게 출력할 수 있다.Python 코드import sysinput = sys.stdin.readlinen = int(input())arr ..
문제동영상 재생기에 대한 명령어가 주어졌을 때, 알맞게 시간 이동하여 최종 재생 위치를 도출하는 문제이다.명령어는 prev와 next 두 가지가 있으며, 현재 재생 위치가 오프닝 구간이면 자동으로 오프닝 건너뛰기를 실행한다.prev 명령은 현재 재생 위치에서 10 이전으로 이동하는 명령어이며 0보다 작아지지 않는다.next 명령은 현재 재생 위치에서 10 이후로 이동하는 명령어이며 최대 길이보다 커지지 않는다.오프닝 건너뛰기는 오프닝 구간 (op_start ≤ 현재 위치 ≤ op_end)인 경우 op_end로 이동한다.풀이문자열로 주어진 시간을 숫자로 변환하고, 명령어에 따라 시간을 더하고 뺌으로써 문제를 풀 수 있다.mm:ss 가 주어지면 t = mm*60 + ss 로 변환한다.prev 명령어가 주어지..
Elasticsearch엘라스틱서치(Elasticsearch)는 아파치 루씬(Apache Lucene)을 기반으로 개발된 오픈소스 분산 검색 엔진이다. 루씬의 역색인(inverted index) 구조를 활용하여 문서 내 단어들을 빠르게 색인하고 검색할 수 있다.엘라스틱서치는 검색 엔진 기능 외에도 로그 분석과 실시간 모니터링 등에 사용된다.특히 Logstash와 Kibana와 함께 사용되어 데이터 수집, 저장, 분석, 시각화를 제공할 수 있다.Elasticsearch Python Client 사용하면 Python 애플리케이션에서 Elasticsearch를 쉽게 통합할 수 있다. 1) Elasticsearch 설치Elasticsearch Python Client를 설치하려면 pip를 사용하면 된다.pip ..
FastAPIFastAPI란 빠르고 간단한 python 기반의 웹 프레임워크이다.비동기 방식을 사용하기 때문에 Uvicorn이나 Hypercorn의 ASGI Server가 필요하다.예제에서는 Uvicorn을 사용하려 한다. 1) FastAPI 및 Uvicorn 설치pip install fastapipip install "uvicorn[standard]" 2) main.py 예제 파일 생성하기from typing import Unionfrom fastapi import FastAPIapp = FastAPI()@app.get("/")def read_root(): return {"Hello": "World"}@app.get("/items/{item_id}")def read_item(item_id: int..
문제트리는 사이클이 없는 무방향 그래프이며, 두 노드 사이의 경로가 항상 하나만 존재한다.두 노드를 선택하여 양쪽으로 쫙 당길 때, 가장 길게 늘어나는 경우를 트리의 지름이라고 한다.입력으로는 루트가 있는 가중치가 있는 간선들로 이루어진 트리가 주어지며, 트리의 지름을 구하는 프로그램을 작성해야 합니다.풀이트리의 지름을 찾기 위해 DFS를 활용한다.트리의 임의의 노드 $x$를 기준으로 잡는다.노드 $x$로부터 노드 간 거리를 DFS를 통해 구하고, 거리가 가장 먼 노드 $y$를 찾는다.노드 $y$를 기준으로 노드 간 거리를 다시 구한다.거리가 가장 먼 노드 $z$를 찾는다. 노드 $y$와 노드$z$ 사이의 거리가 트리의 지름이다. (가장 큰 값을 출력하면 된다.)◆ 트리의 지름 증명트리의 지름 양쪽 끝 ..
문제 n개의 보석의 무게(m)와 가격(v) 정보가 주어지고, m개의 가방이 최대 담을 수 있는 무게(c) 정보가 주어졌을 때, 가질 수 있는 보석의 최대 가격을 구하는 문제이다. 이때 한 개의 가방에는 한 개의 보석만 넣을 수 있다. 풀이 우선순위 큐를 사용하여 문제를 풀 수 있다. 보석과 가방의 무게를 비교하고 담을 수 있는 보석이라면 가장 큰 가격의 보석을 담도록 하는 것이다. 먼저 보석의 정보를 얻을 때, 같은 무게를 가진 보석이 다수 존재할 수 있음으로 딕셔너리 자료구조에 담는다. 딕셔너리로 관리하는 것이 메모리가 조금 늘지만 더 빠른 속도를 보여준다. 한 개의 가방에는 한 개의 보석만 들어가기 때문에 보석의 최대 무개(1000000)와 비교해서 넘어가는 것은 최대 무게로 대체한다. 보석의 무게가..
Pretrained 된 딥러닝 모델을 좀 더 학습시키고 싶을 때, 코드에 손대지 않고 내가 갖고 있는 데이터를 알맞게 수정해야 하기도 한다. 최근에는 tsv 데이터셋으로 학습된 모델을 Finetuning 하게 되어 갖고 있던 데이터셋을 변환해야 했다. 1. TSV 파일 tsv 는 Tab-Separated-Values 의 약자로 tab을 통해 구분되어 있는 파일이다. tsv 파일은 결국 콤마(Comma)로 구분되어 있는 csv 파일과 유사하다. 다만 구분자(delimiter)가 tab으로 이루어져 있다는 차이가 있을 뿐이다. 2. TSV 파일 읽고 쓰기 구분자의 차이만 있기 때문에 pandas를 통해 csv 파일을 읽고 쓰는 것과 같은 방법으로 tsv를 읽고 쓸 수 있다. import pandas as p..