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

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

코드

def solution(gems):
    answer=[]
    check=set()
    ck = {gem:0 for gem in set(gems)}
    
    start=0
    for end, gem in enumerate(gems):
        ck[gem]+=1
        check.add(gem)
        if len(check)==len(ck):
            answer.append([start+1,end+1])
            while start<end and ck[gems[start]]>1:
                ck[gems[start]]-=1
                start+=1
                answer.append([start+1,end+1])            
            
    return sorted(answer,key=lambda x: x[1]-x[0])[0]

투포인터 문제다.

start=end=0 으로 시작해서 모든 종류의 보석을 check에 넣을 때까지 ck[gem]을 증가시킨다.

그 다음에 ck[gems[start]]이 1일 때까지 start를 늘려간다.

즉 모든 종류의 보석을 가지고 있는 상황에서 start를 오른쪽으로 이동시킨다.

그 다음에 end를 한칸 다음으로 이동시키고 앞서의 과정을 반복한다.

Discussion and feedback