이번 문제는 BFS를 통한 그래프 탐색으로 해결하였다. 초반에 뼈대는 바로 작성하였지만 예외처리를 하는 부분에서 시간이 오래 걸렸다. n이 k보다 큰 경우와 n이 0이고, k가 1인 경우에만 bfs함수에서 None이 반환되었다. 그래서 이 경우에 대한 예외처리를 진행하였고, 이를 통해 문제를 해결할 수 있었다. 경로의 경우에는 deque에 리스트를 넣어 따로 따로 관리되도록 하였다.
2*(k-1)+1
의 크기로 선언하고 False로 채운다.visited[n]
을 True로 갱신한다.(0, n, [n])
을 넣는다.[time, path]
를 반환한다.(cur+dw[i])*dt[i]
로 선언한다.2*(k-1)
이하이고, visited[nxt]
가 False일 경우,visited[nxt]
를 True로 갱신한다.(time+1, nxt, path+[nxt])
를 넣는다.bfs()
의 반환값을 answer에 저장한다.answer[0]
을 출력한다.answer[1]
을 출력한다.from collections import deque
n, k=map(int, input().split())
dw=[1, -1, 0]
dt=[1, 1, 2]
def bfs():
visited=[False for _ in range(2*(k-1)+1)]
visited[n]=True
q=deque()
q.append((0, n, [n]))
while q:
time, cur, path=q.popleft()
if cur==k:
return [time, path]
for i in range(3):
nxt=(cur+dw[i])*dt[i]
if 0<=nxt<=2*(k-1) and not visited[nxt]:
visited[nxt]=True
q.append((time+1, nxt, path+[nxt]))
if n>k:
print(n-k)
print(*list(range(n, k-1, -1)))
elif n==0 and k==1:
print(k-n)
print(*[n, k])
else:
answer=bfs()
print(answer[0])
print(*answer[1])