접근 방법 : 투 포인터 + 딕셔너리
from collections import defaultdict
def solution(gems):
answer = []
#최대 진열대 길이
max_len = len(gems) + 1
#보석 종류 개수
gem_kind_count = len(set(gems))
#투 포인터 변수 초기화
start, end = 0, 0
#보석 개수 dict 선언
gem_dict = defaultdict(int)
while end < len(gems):
# 보석 종류 개수가 같아 질 때 까지 보석을 담는다.
gem_dict[gems[end]] += 1
end += 1
if len(gem_dict) == gem_kind_count:
while start < end:
# 보석 종류 개수가 같고 start index 보석 개수가 2개 이상이 되는 순간
# start를 1 올리고 보석 하나 뺀다.
if gem_dict[gems[start]] > 1:
gem_dict[gems[start]] -= 1
start += 1
# 가징 긴 길이랑 비교해서 start, end 갱신
elif max_len > end - start:
max_len = end - start
answer = [start + 1, end]
break
else:
break
return answer