알고리즘/문제

[투포인터] 프로그래머스 보석 쇼핑

_Min 2021. 6. 25. 11:29

문제링크 https://programmers.co.kr/learn/courses/30/lessons/67258

 

1. 최소 길이를 구할 땐 투포인터 알고리즘을 생각해보자

2. 0 인덱스를 갖는 값은 미리 넣어준다

 

 

[답코드]

from collections import defaultdict
def solution(gems):
    gems_len=len(set(gems))
    dic=defaultdict(int)
    dic[gems[0]]=1

    answer=[]
    start=0; end=0

    while start<len(gems) and end<len(gems):
        if len(dic)==gems_len: #길이저장
            answer.append([start, end])
            dic[gems[start]]-=1
            if dic[gems[start]]==0 : del dic[gems[start]]
            start+=1
        else:
            end += 1
            if end==len(gems) : break
            dic[gems[end]]+=1

    answer.sort(key=lambda x:((x[1]-x[0]), x[0]))
    return [answer[0][0]+1, answer[0][1]+1]
728x90