코딩 테스트/프로그래머스 level2

보석 쇼핑(투 카운터 예제)

fullfish 2025. 10. 1. 09:44

 

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]]