Written by
최태열
on
on
[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