리스트에 방문했던 위치를 계속 누적했을 경우 메모리초과가 나와서,
딕셔너리를 통해 해당 위치의 전 위치를 저장하는 방법으로 구현하였습니다.
import sys
from collections import deque, defaultdict
input=sys.stdin.readline
N,K=map(int,input().split())
visit=[0]*100001
q=deque()
dicts=defaultdict(int)
q.append(N)
while q:
num=q.popleft()
if num==K:
print(visit[num])
answer=[]
while num!=N:
answer.append(num)
num=dicts[num]
answer.append(N)
answer.reverse()
print(' '.join(map(str,answer)))
break
for tmp in (num+1,num-1,num*2):
if 0<=tmp<=100000 and visit[tmp]==0:
dicts[tmp] = num
visit[tmp] = visit[num] + 1
q.append(tmp)
https://www.acmicpc.net/problem/13913
13913번: 숨바꼭질 4
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
'IT > coding study' 카테고리의 다른 글
[acmicpc] 14442. 벽 부수고 이동하기 2(python) (0) | 2023.08.12 |
---|---|
[acmicpc] 5427. 불(python) (0) | 2023.03.31 |
[acmicpc] 16236. 아기상어(python) (0) | 2023.03.19 |
[acmicpc] 1938. 통나무 옮기기(python) (0) | 2023.03.05 |
[acmicpc] 21609. 상어 중학교(python) (0) | 2023.02.12 |