문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/67258
def solution(gems):
jew = {gems[0]:1}
start_idx, end_idx = 0,0
kind = list(set(gems)) #보석의 종류
_len = len(gems)
ans = [1, _len]
while start_idx < _len and end_idx < _len:
if len(jew) == len(kind): #구간의 보석의 종류와 전체 종류가 동일하다면
if ans[1] - ans[0] > end_idx - start_idx: #진열대 길이 비교
ans[0] = start_idx + 1
ans[1] = end_idx + 1
if jew[gems[start_idx]] > 1:
jew[gems[start_idx]] -= 1
else:
jew.pop(gems[start_idx])
start_idx += 1 #시작점을 다시 끌어올림
else:
end_idx += 1 #끝점을 뒤로 늘림
if end_idx == _len:
break
if gems[end_idx] in jew:
jew[gems[end_idx]] += 1
else:
jew[gems[end_idx]] = 1
return ans