Python/백준

1697_숨바꼭질

728x90

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

 

1697번: 숨바꼭질

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

www.acmicpc.net

 

bfs를 이용하면 풀면 된다!

 

처음엔 단순하게 que에 현재 점을 추가해 가면서 하려 했는데 수가 너무 커지거나 해서 시간초과나 메모리 초과가 계속해서 났다. 

 

한번 들렀던 점은 그때가 최소이기에 두번 들리지 않고, 또한 값이 0 < x < 100000으로 정해져 있기때문에 이를 제한해두고 문제를 푸니 풀렸다.

 

 

from collections import deque
n,m = map(int,input().split())


q = deque([n])
dp= [ 0 for _ in range(100001)]

while q:
    x = q.popleft()
    if x == m :
        print(dp[x])
        break

    for nx in (x-1,x+1,2*x):
        if 0 <= nx <= 100000 and not dp[nx]:
            dp[nx] = dp[x] +1
            q.append(nx)


728x90

'Python > 백준' 카테고리의 다른 글

7562_나이트의 이동  (0) 2022.04.03
2206_벽부수고 이동하기  (0) 2022.04.02
1012_유기농 배추  (0) 2022.03.28
2667_단지번호 붙이기  (0) 2022.03.27
2606_바이러스  (0) 2022.03.26