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

쏠로몬·2021년 10월 13일
0

접근 방법 : 투 포인터 + 딕셔너리

from collections import defaultdict
def solution(gems):
    answer = []
    
    #최대 진열대 길이
    max_len = len(gems) + 1
    #보석 종류 개수
    gem_kind_count = len(set(gems))
    #투 포인터 변수 초기화
    start, end = 0, 0
    #보석 개수 dict 선언
    gem_dict = defaultdict(int)
    
    while end < len(gems):
        # 보석 종류 개수가 같아 질 때 까지 보석을 담는다. 
        gem_dict[gems[end]] += 1
        end += 1
        
        if len(gem_dict) == gem_kind_count:
            while start < end:
                # 보석 종류 개수가 같고 start index 보석 개수가 2개 이상이 되는 순간 
                # start를 1 올리고 보석 하나 뺀다.
                if gem_dict[gems[start]] > 1:
                    gem_dict[gems[start]] -= 1
                    start += 1
                # 가징 긴 길이랑 비교해서 start, end 갱신
                elif max_len > end - start:
                    max_len = end - start
                    answer = [start + 1, end]
                    break
                else:
                    break
    return answer
profile
이사가요~ 티스토리 블로그 입니다. https://help-solomon.tistory.com/

0개의 댓글