문제 링크

풀이 과정

전체 코드

def solution(gems):
    gem = list(set(gems))
    n = len(gem)
    dic = {gems[0]: 1}
    answer = [1, len(gems)]
    start, end = 0, 0
    
    while start <= end and end < len(gems):
        if len(dic) == n:
            # 비교 연산자가 >= 가 아닌 > 임에 주목하세요!
            # 구간의 길이가 같아도, start 값이 작은 진열대를 먼저 탐방하므로, 구간을 갱신하지 않습니다.
            if answer[1]-answer[0] > end - start:    answer = [start+1, end+1]     
            dic[gems[start]] -= 1
            if dic[gems[start]] == 0:   del dic[gems[start]]
            start += 1

        elif len(dic) < n:
            end += 1
            if end >= len(gems):  break
            dic[gems[end]] = dic.get(gems[end], 0) + 1
                 
    return answer