Skip to content

Commit d428a1d

Browse files
committed
[BOJ]#13913. 숨바꼭질4/ 골드4 / 1h
https://www.acmicpc.net/problem/13913
1 parent e48b389 commit d428a1d

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

Hongjoo/백준/숨바꼭질4.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import sys
2+
from collections import deque
3+
input = sys.stdin.readline
4+
N, K = map(int, input().split())
5+
MAX = 100001
6+
# answer = []
7+
#[1] 최단 시간 찾기
8+
visited = [[MAX, MAX] for _ in range(MAX+1)]# level 기입
9+
10+
t= 0
11+
next_node = [N]
12+
q = deque([N])
13+
visited[N] = [t,N] # 도착 시간 , 이전 node 위치 확인
14+
15+
#(예외처리) 출발지 = 도착지 같은 경우
16+
if K != N :
17+
while q :
18+
t+=1
19+
next_node = len(q)
20+
for i in range(next_node) : # 현재 level의 node개수만큼 반복
21+
cx = q.popleft()
22+
# print(f"cx {cx} , {next_node}")
23+
# 만약 목적 달성시 , 끝
24+
for nx in [cx -1 , cx+1 , cx*2]:
25+
if 0<= nx <= MAX and visited[nx][0]>= MAX :
26+
q.append(nx)
27+
visited[nx] = [t, cx]
28+
# 현재 q -> 다음 level 의 노드만 남아있는 상태
29+
# 만약 K을 도달한 경우-> 최단 시간 저장
30+
if visited[K][0]< MAX :
31+
break
32+
print(t)
33+
#[2] 역추적 - 최단 시간 경우 , 경로 추적
34+
re_visited = [K]
35+
pt = K
36+
while pt != N :
37+
_ , pt =visited[pt]
38+
re_visited.append(pt)
39+
40+
print(" ".join(map(str,list(reversed(re_visited)))))
41+

0 commit comments

Comments
 (0)