https://programmers.co.kr/learn/courses/30/lessons/67258
모든 종류의 보석을 포함할 때까지 끝점(end)을 증가한 뒤, 해당 구간이 최단거리가 되도록 시작점을 증가한다.
투포인터 문제
def solution(gems):
answer = []
shortest = len(gems)+1
start,end = 0,0
jewerly_type = len(set(gems)) # 보석의 총 종류수
jewerly = {} # 현재 구간에 포함되어 있는 보석 종류
while end < len(gems):
# 현재 보석 종류 update
if gems[end] not in jewerly:
jewerly[gems[end]] = 1
else:
jewerly[gems[end]] += 1
end += 1
# 현재 구간의 보석종류 = 총 종류수
if len(jewerly) == jewerly_type:
# start가 end보다 같을 때까지 증가
while start < end:
if jewerly[gems[start]] > 1: # 2개 이상 있는 거
jewerly[gems[start]] -= 1
start += 1
# 기존 구간 최단거리 > 현재 구간거리
elif shortest > (end-start):
shortest = end-start
answer = [start+1, end]
break
else:
break
return answer