Lv3 프로그래머스(Programmers)[Python][파이썬] 보석 쇼핑

"""
출처:프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/67258
"""

# 풀이 과정
"""
투포인터
"""

import heapq
from collections import defaultdict
from collections import deque
from collections import Counter


def solution(gems):
# 종류
check = len(set(gems))

start, end = 0, 0

my = defaultdict(int)

result = float("inf")
result_start, result_end = float("inf"), float("inf")

my[gems[start]] += 1

while start <= len(gems) - 1:
if len(my) != check:
if end < len(gems) - 1:
end += 1
my[gems[end]] += 1
else:
break
else:
if end - start < result:
result = end - start
result_start, result_end = start, end

if start == end:
return [start + 1, end + 1]

else:
my[gems[start]] -= 1

if my[gems[start]] == 0:
del my[gems[start]]

start += 1

# 마지막
if not result_start <= len(gems) and not result_end <= len(gems):
return [1, len(gems)]

return [result_start + 1, result_end + 1]