def solution(gems):
gems_len = len(gems)
gem_kind_len = len(set(gems))
result_obj = {}
result_range = (0, float("inf"))
left = 0
right = 0
while True:
# 모든 보석
if gem_kind_len == len(result_obj):
# 더 범위가 짧다면
if result_range[1] - result_range[0] > right - left:
result_range = (left, right)
temp_key = gems[left]
result_obj[temp_key] -= 1
if result_obj[temp_key] == 0:
del result_obj[temp_key]
left += 1
# rgith는 이미 오른쪽 최대에서 1칸 넘어간 상태 && 모든 보석 아님
elif right == gems_len:
break
else:
temp_key = gems[right]
result_obj[temp_key] = result_obj.get(temp_key, 0) + 1
right += 1
return [result_range[0] + 1, result_range[1]]