STUDY/Algorithm

[백준] 1697 숨바꼭질 python

sinawi95 2021. 3. 29. 17:48
728x90

www.acmicpc.net/problem/1697

 

1697번: 숨바꼭질

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

www.acmicpc.net

from collections import deque
n, k = map(int, input().split())
dp = [0] * 100001
q = deque([n])
dp[n] = 1
while q:
    x = q.popleft()
    if 0 <= x - 1 and dp[x - 1] == 0:
        dp[x - 1] = dp[x] + 1
        q.append(x - 1)
    if x + 1 <= 100000 and dp[x + 1] == 0:
        dp[x + 1] = dp[x] + 1
        q.append(x + 1)
    if x <= 50000 and dp[2 * x] == 0:
        dp[2 * x] = dp[x] + 1
        q.append(2 * x)
    #print(q)
    if dp[k]:
        break
#print(dp)
result = dp[k]-1
print(result)

dp를 사용해서 n에서 시작해서 k까지 갈때 모든 자리를 바꿔주었다.

bfs에서 최소거리를 구할때 사용한 방법을 사용해서 이전 자리보다 1씩 더 크게 만들었고

dp[k]가 0이 아닌지 계속 확인하면서 아닌경우 break을 걸어서 반복문을 빠져나왔다.

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

[백준] 2210 숫자판 점프 python  (0) 2021.03.29
[백준] 12851 숨바꼭질 2 python  (0) 2021.03.29
[백준] 2660 회장뽑기 python  (0) 2021.03.28
[백준] 2636 치즈 python  (0) 2021.03.28
[백준] 1242 소풍 파이썬  (0) 2021.03.27