본문 바로가기
백준

[python] 13549. 숨바꼭질 3

by DylanMsK 2019. 8. 19.

문제 출처

13549. 숨바꼭질 3

 

풀이


N, K = map(int,input().split())
if N > K:
    print(N-K)
elif N == K:
    print(0)
else:
    time = 0
    length = min(100001, K*2+1)
    visited = [0]*length
    q = []
    if N == 0:
        visited[0] = 1
        q.append(0)
    else:
        now = N
        while now < length:
            visited[now] = 1
            q.append(now)
            now *= 2

    while 1:
        if visited[K]:
            break
        nxt = []
        for i in q:
            if i > K:
                if 0 <= i-1 < length and not visited[i-1]:
                    nxt.append(i-1)
                continue
            for j in 1, -1:
                if 0 <= i+j < length and not visited[i+j]:
                    nxt.append(i+j)
        nxt = set(nxt)
        q = []
        for i in nxt:
            if i == 0:
                visited[0] = 1
                q.append(0)
                continue
            now = i
            while 1:
                if 0 <= now < length and not visited[now]:
                    visited[now] = 1
                    q.append(now)
                if now > K:
                    break
                now *= 2
        q = list(set(q))
        time += 1

    print(time)
    
    

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

[python] 13913. 숨바꼭질 4  (0) 2019.08.19
[python] 13549. 숨바꼭질 3  (0) 2019.08.19
[python] 12851. 숨바꼭질 2  (0) 2019.08.19
[python] 6118. 숨바꼭질  (0) 2019.08.19
[python] 13023. ABCDE  (0) 2019.08.19