알고리즘
[프로그래머스, 파이썬] 숫자 변환하기
hminor
2024. 3. 22. 11:24
반응형
풀이
- 값 비교를 계속 진행해야 하고 몇 번 작업을 했는지 확인해야 하기에
- deque를 활용하여 해결하고자 했으며
- 처음에는 연산을 마친 값이 y보다 작거나 같을 경우만 해서 q에 추가하여 해결하고자 했지만
- 시간초과가 발생하여 어떻게 하면 좋을지 살펴본 결과
- 방문 표시를 하면 되었기에 해쉬로 값을 찾는 집합 형태로 visit를 만들어
- 연산 값이 지난 번에 작업하지 않은 값의 경우만 q에 추가하도록 하여 해결.
from collections import deque
def solution(x, y, n):
if x == y: return 0
visit = {x}
q = deque([[x+n,1],[x*2,1],[x*3,1]])
while q:
val,cnt = q.popleft()
if val == y: return cnt
for i in [val+n,val*2,val*3]:
if y >= i and i not in visit:
visit.add(i)
q.append([i,cnt+1])
return -1