[프로그래머스] 보석쇼핑

joon_1592·2022년 5월 6일

알고리즘

목록 보기
39/51

투포인터 복습겸 다시 풀어보았다

defaultdictlen()은 key의 value가 0이어도 살아있다. 따라서 원치않는 길이가 나올 수 있으므로 삭제한다

from collections import defaultdict

def solution(gems):
    N = len(gems)
    N_GEM = len(set(gems))
    counter = defaultdict(int)
    
    head, tail = 0, 0
    min_len = float('inf')
    answer = []
    for head in range(N):
        while tail < N and len(counter) < N_GEM:
            counter[gems[tail]] += 1
            tail += 1
        if len(counter) == N_GEM:
            #print(head, tail - 1)
            if tail - head < min_len:
                min_len = tail - head
                answer = [head + 1, tail]
        
        counter[gems[head]] -= 1
        if counter[gems[head]] == 0:
            del counter[gems[head]]
    
    
    return answer
profile
공부용 벨로그

0개의 댓글