[BOJ] 13549. ์ˆจ๋ฐ”๊ผญ์งˆ 3 (๐Ÿฅ‡, BFS/๋‹ค์ต์ŠคํŠธ๋ผ)

lemythe423ยท2023๋…„ 8์›” 7์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
21/133
post-thumbnail

๋ฌธ์ œ

ํ’€์ด

๐ŸŽฏ ๋‹ค์ต์ŠคํŠธ๋ผ ํ’€์ด

์ด๋™ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๊ฐ€์ค‘์น˜๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ํ’€์ดํ–ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ(ํž™ ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉ)๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์งง๊ฒŒ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๋จผ์ € ๊บผ๋‚ด์„œ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋Š” ํ˜„์žฌ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋ ค๋Š” ์œ„์น˜(x)๊นŒ์ง€์˜ ์‹œ๊ฐ„(visited[x])์ด ํ•จ๊ป˜ ๊บผ๋‚ด์ง„ ํ˜„์žฌ๊นŒ์ง€์˜ ์‹œ๊ฐ„(dist)๋ณด๋‹ค ๋” ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ๊ฒฝ์šฐ์—๋งŒ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋” ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒฝ์šฐ 1. ์ด๋ฏธ ๋” ์งง์€ ์‹œ๊ฐ„์œผ๋กœ ๋ฐฉ๋ฌธํ–ˆ๊ณ , 2. ๋” ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋Š” ๋ฐฉ๋ฌธํ•  ์ด์œ ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ

# ์ˆจ๋ฐ”๊ผญ์งˆ 3

import heapq

N, K = map(int, input().split())

def sol():
    if N >= K:
        return N-K
    
    visited = [1e9]*100001
    visited[N] = 0
    pq = [(0, N)]

    while pq:
        dist, x = heapq.heappop(pq)

        if visited[x] != dist:
            continue
        
        if x+1 < 100001 and visited[x+1] > dist+1:
            visited[x+1] = dist+1
            heapq.heappush(pq, (dist+1, x+1))
        if x-1 > -1 and visited[x-1] > dist+1:
            visited[x-1] = dist+1
            heapq.heappush(pq, (dist+1, x-1))
        if 2*x < 100001 and visited[2*x] > dist:
            visited[2*x] = dist
            heapq.heappush(pq, (dist, 2*x))
    
    return visited[K]

print(sol())
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€