이전 숨바꼭질 문제와 다른 점은 어떻게 이동해야하는지 이동경로를 공백으로 구분해서 출력해야한다.
path배열에 next step번째에다가 현재 step을 저장해두고 나중에 역추적해서 출력해주면 된다.
from collections import deque
N, K = map(int, input().split())
q = deque()
q.append(N)
time = [0 for _ in range(100001)]
path = [0 for _ in range(100001)]
ans = []
while q:
v = q.popleft()
if v == K:
print(time[v])
ans.append(str(K))
while v!= N:
ans.append(str(path[v]))
v = path[v]
ans = ans[::-1]
print(' '.join(ans))
break
for next_step in (v-1, v+1, v*2):
if 0<=next_step<100001 and time[next_step] == 0:
time[next_step] = time[v]+1
path[next_step] = v
q.append(next_step)
'Programming > Algorithm' 카테고리의 다른 글
백준 #1476 - 날짜 계산 (0) | 2019.11.09 |
---|---|
백준 #10819 - 차이를 최대로 (0) | 2019.11.09 |
백준 #1697 - 숨바꼭질 (0) | 2019.11.09 |
백준 #1874 - 스택 수열 python (0) | 2019.10.20 |
백준 #1021 - 회전하는 큐 python (0) | 2019.10.19 |