알고리즘 스터디
[백준] 13913번 : 숨바꼭질4 - Python(파이썬)
히치키치
2021. 5. 25. 16:40
문제
https://www.acmicpc.net/problem/13913
13913번: 숨바꼭질 4
수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일
www.acmicpc.net
풀이
- BFS : 자식 노드 하나씩 방문 : 주어진 값인지 확인 : que 이용
- 시간 : 깊이 하나씩 내려갈 때마다 +1
- 경로 : 이전 노드 (부모 노드) 하나씩 넣기 -> 거꾸로 출력
코드
from collections import deque
def path(x):
arr = []
temp = x
for _ in range(dist_time[x]+1):
arr.append(temp)
temp = route[temp]
print(' '.join(map(str, arr[::-1])))
def bfs():
q = deque()
q.append(N)
while q:
x = q.popleft()
if x == K: #동생 위치 도달
print(dist_time[x]) #걸린 시간 출력
path(x)
return x
for i in (x+1, x-1, 2*x): #이동하는 경우의 수 : 전진, 후진, 순간이동
if 0<=i<=100000 and dist_time[i]==0:
q.append(i)
dist_time[i] = dist_time[x] + 1
route[i] = x
N, K = map(int, input().split())
dist_time = [0]*100001
route = [0]*100001
bfs()