본문 바로가기

boj

백준 13913 숨바꼭질4

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

 

13913번: 숨바꼭질 4

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

www.acmicpc.net

dp로생각했었는데, 사실 bfs였다.

 

먼져, -1로 채워진 빈 배열을 만들고, 현재위치를 0으로 초기화시켜준다.

이후 현재위치에서 x+1,x-1,x*2로 확장하며 bfs를 진행한다.

마지막 경로를 알기 위해 배열을 하나 더 만들고, 이 배열에 현재위치의 전위치를 기억시켜준다.

만일 k에 도달했으면, k까지의 시간을 출력하고,

경로를 쭉 따라가면서 시작위치(-1)이 나올때까지 왔던길을 되짚는다.

이후 뒤집고 출력하면 끝!!

재밌는문제였다.

 

from collections import deque

def bfs(n):
    que=deque()
    que.append(n)
    arr[n]=0

    while que:
        now=que.popleft()
        
        for next in (now+1,now-1,now*2):
                
            if 0<=next<len(arr) and arr[next]==-1:
                arr[next]=arr[now]+1
                last_visit[next]=now
                if next==k: 
                    return
                que.append((next))


    







n,k=map(int,input().split())
if n==k: 
    print(0)
    print(n)
    exit()
arr=[-1 for _ in range(200001)]
last_visit=arr.copy()

bfs(n)
print(arr[k])

tmp=last_visit[k]
answer_list=[k]
while True:
    answer_list.append(tmp)
    tmp=last_visit[tmp]

    if tmp==-1:
        answer_list.reverse()
        break
print(* answer_list)

'boj' 카테고리의 다른 글

백준 2293 동전1  (0) 2022.05.01
백준 14226 이모티콘  (0) 2022.04.30
백준 2146 다리 만들기  (0) 2022.04.29
백준 16947 서울 지하철 2호선 (언젠간수정예정)  (0) 2022.04.28
벡준 16929 two dots  (0) 2022.04.26