본문 바로가기
코딩테스트

BFS 백준 - 13913 [Python]

by 지구킹 2021. 8. 27.
728x90

Problem)

https://www.acmicpc.net/problem/13913

 

13913번: 숨바꼭질 4

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일

www.acmicpc.net

Solution)

  • from[i] = 어디에서 왔는지
  • 의미: from[i] -> i
  • N에서 K를 가는 문제이기 때문에
  • K부터 from을 통해서 N까지 가야한다.
  • 즉, 역순으로 저장되기 때문에, 다시 역순으로 구하는 것이 필요하다.

Answer)

from collections import deque
import sys
MAX = 200000
sys.setrecursionlimit(MAX)
check = [False] * MAX
dist = [-1] * MAX
via = [-1] * MAX
n,m = map(int,input().split())
check[n] = True
dist[n] = 0
q = deque()
q.append(n)
while q:
    now = q.popleft()
    if now-1 >= 0 and not check[now-1]:
        q.append(now-1)
        check[now-1] = True
        dist[now-1] = dist[now] + 1
        via[now-1] = now
    if now+1 < MAX and not check[now+1]:
        q.append(now+1)
        check[now+1] = True
        dist[now+1] = dist[now] + 1
        via[now+1] = now
    if now*2 < MAX and not check[now*2]:
        q.append(now*2)
        check[now*2] = True
        dist[now*2] = dist[now] + 1
        via[now*2] = now
print(dist[m])
def go(n, m):
    if n != m:
        go(n, via[m])
    print(m, end=' ')
go(n, m)
728x90

'코딩테스트' 카테고리의 다른 글

BFS 백준 - 1697 [Python]  (0) 2021.08.27
BFS 백준 - 2667 [Python]  (0) 2021.08.20
DFS  (0) 2021.08.20
다이나믹 프로그래밍 - 백준 1912 [Python]  (0) 2021.08.05
다이나믹 프로그래밍 - 백준 14002 [Python]  (0) 2021.08.05

댓글