[BOJ] 13549. ์จ๋ฐ๊ผญ์ง3(python)
๐๋ฌธ์
๐ช์์ด๋์ด
ํด๋น ์์น์์ ์์ง์ด๊ธฐ
์์ง์ด๋ ๋ฐฉ๋ฒ์ ์์ผ๋ก ๊ฑท๊ธฐ(x+1)
, ๋ค๋ก ๊ฑท๊ธฐ(x-1)
, ์๊ฐ์ด๋ํ๊ธฐ(2*x)
๋ก, ์ธ ๊ฐ์ง์ด๋ค.์์ง์ด๋ ๋ฐฉ๋ฒ๋ณ ์๋ชจ ์๊ฐ
๊ฑธ์ ๊ฒฝ์ฐ +1, ์๊ฐ์ด๋ํ ๊ฒฝ์ฐ 0์ ์๊ฐ์ด ์๋ชจ๋๋ค.
์ต์์ ์๋ชจ์๊ฐ์ ๊ตฌํ๊ธฐ ์ํด์๋ ์๋ชจ์๊ฐ์ด ์ ๊ฒ ๊ฑธ๋ฆฌ๋ ์์ง์ด๋ ๋ฐฉ๋ฒ์ ์ ํํด์ผํ๊ธฐ ๋๋ฌธ์ min heap์ ์ฌ์ฉํ๋ค.์ต์์ ์๊ฐ์ผ๋ก ์์ง์ด๋ ๋ฐฉ๋ฒ์ฐพ๊ธฐ
bfs๋ฅผ ์ฌ์ฉํ๋๋ฐ min heap์ ์ฌ์ฉํ์ฌ ์ต์์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๋ฐฉ๋ฒ๋ถํฐ ํ์ํ๋ค.
(์๊ฐ, ํ์ฌ์์น)๋ก ์์๋ฅผ ๋ฃ๋๋ค. hepapop ์ ํ๋ฉด ํ์ฌ์์น์์ ์ต์์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์์๊ฐ ๋์ฌ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ์ฌ์์น๊ฐ ๋์์์น์ ๊ฐ์ผ๋ฉด ํ์์ ์ข ๋ฃํ๋ค.
๐ฅ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import sys; input = sys.stdin.readline
from heapq import heappush,heappop
def bfs():
move[n] = 0
heap = []
heappush(heap,(0, n))
while heap:
cnt, cur = heappop(heap)
if cur == k:
print(cnt)
return
for opt, c in [(cur+1,1), (cur-1,1), (2*cur,0)]:
if 0 <= opt <= 100000:
clock = cnt + c
if move[opt] > clock:
move[opt] = clock
heappush(heap,(clock,opt))
n, k = map(int,input().split())
move = [float('inf')] * 100001
bfs()
Comments powered by Disqus.