코딩 테스트/프로그래머스 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]]

'코딩 테스트 > 프로그래머스 level2' 카테고리의 다른 글

배달 힙 다익스트라  (0) 2025.10.16
징검다리 건너기(이진 탐색 예제)  (0) 2025.10.01
주식가격 (stack 기본 예제)  (0) 2025.09.30
프린터  (0) 2022.09.12
k진수에서 소수 개수 구하기  (0) 2022.09.12