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
'알고리즘' 카테고리의 다른 글
Python - 내리막 길 (1520) DP, DFS (0) | 2023.06.12 |
---|---|
Python - 경주로 건설 (DFS, 메모이제이션) (1) | 2023.06.11 |
Python - 두 수의 합(3273) 투 포인터 (0) | 2023.06.09 |
Python - 초콜릿 식사 (2885) 그리디 (0) | 2023.06.07 |
Python - 2048 (Easy) (12100) 구현, 브루트포스 (0) | 2023.06.06 |