알고리즘
Python - 보석 쇼핑 (투 포인터)
jun.s.gi
2023. 6. 10. 01:35
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/67258
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 두 개의 포인터가 토끼와 거북이처럼 같은 시작점에서 출발합니다.
i 보석이 현재 Temp딕셔너리에 없으면 추가하고 있으면 하나 더합니다. (ed 포인터 +1)
ii. Temp딕셔너리에 모든 보석이 담겼으면
1) 정답을 최솟값으로 갱신
2) st 포인터에 있는 보석의 개수가 1개라면 그 보석은 딕셔너리에서 지웁니다.(pop)
3) 보석의 개수가 2개 이상이라면 1개 뺍니다. ( Temp[gems[st]] -= 1)
def solution(gems):
answer = [100001, 999999]
checkGems = len(set(gems))
tempGems = {}
st = 0
ed = 0
while st <= ed:
if len(tempGems) != checkGems:
if ed == len(gems): break
if gems[ed] in tempGems:
tempGems[gems[ed]] += 1
else:
tempGems[gems[ed]] = 1
ed += 1
else:
if answer[1] - answer[0] > (ed) - (st + 1) or (answer[1] - answer[0] == (ed) - (st + 1) and answer[0] > st + 1):
answer[0] = st + 1
answer[1] = ed
if tempGems[gems[st]] > 1:
tempGems[gems[st]] -= 1
else:
tempGems.pop(gems[st])
st += 1
return answer
728x90