Algorithm/Python

[백준 13913] 숨바꼭질 4

🥭맹2 2021. 5. 6. 20:59

1. 문제

www.acmicpc.net/problem/13913

 

13913번: 숨바꼭질 4

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

www.acmicpc.net

2. 접근 방법

경로를 어떻게 담냐가 관건이었다.

 

처음에 ㅋㅋㅋㅋ

아무 생각없이 그냥 2차 행렬 만들어서 다 집어넣었다가

메모리 초과 바로 나버리고

 

그 전 인덱스만 담았다.

 

그렇게 해서 최종 인덱스에 도달했을 때,

하나씩 pop 해서 프린트했다.

 

3. 코드

python

from collections import deque

def bfs(n):
    global visited, path
    q = deque()
    q.append(n)
    visited[n] = 0
    while q:
        x = q.popleft()
        if x == K:
            print(visited[x])
            p = []
            while x != N:
                p.append(x)
                x = path[x]
            p.append(n)
            p.reverse()
            print(*p)
            return
        for nx in (x*2, x+1, x-1):
            if 0 <= nx <= MAX and visited[nx] == -1:
                q.append(nx)
                visited[nx] = visited[x] + 1
                path[nx] = x
MAX = 100000
N, K = map(int, input().split())
visited = [-1] * (MAX+1)
path = [0] * (MAX+1)
bfs(N)

4. 마치며

마치며~!

'Algorithm > Python' 카테고리의 다른 글

[백준 10974] 모든 순열  (0) 2021.05.10
[백준 10973] 이전 순열  (0) 2021.05.09
[백준 1697] 숨바꼭질  (0) 2021.05.06
[백준 10972] 다음 순열  (0) 2021.05.06
[백준 1476] 날짜 계산  (0) 2021.05.05