[BOJ] 12851. ์จ๋ฐ๊ผญ์ง2(python)
๐๋ฌธ์
๐ช์์ด๋์ด
์ต์ํ์ ์ฌ์ฉํ bfs
์๊ฐ์ ๋ ธ๋๋ก ์ต์ํ์ queue๋ก ์ฌ์ฉํ๋ฉด ๊ฐ์ฅ ์ ๊ฒ ๊ฑธ๋ฆฐ ์๊ฐ์ด ๋จผ์ ๋์จ๋ค.
์ด ๋ฌธ์ ๋ ์ด๋ป๊ฒ ์์ง์ด๋ (x+1, x-1, 2*x) time+1์ด๊ธฐ๋๋ฌธ์ ๊ตณ์ด ์ต์ํ์ ์ฌ์ฉํ์ง ์๊ณ deque๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.๊ฐ์ฅ ์ ๊ฒ ๊ฑธ๋ฆฐ ์๊ฐ ๊ตฌํ๊ธฐ
pop๋ ํ์ฌ ์์น๊ฐ ๋์์ ์์น(K)๋ผ๋ฉด ๊ฐ์ฅ ์ ๊ฒ ๊ฑธ๋ฆฐ ์๊ฐ์ด๋ค.๊ฐ์ฅ ์ ๊ฒ ๊ฑธ๋ฆฐ ์๊ฐ์ ๋ฐฉ๋ฌธ ํ์ ๊ตฌํ๊ธฐ
๋จผ์ ๊ฐ์ฅ ์ ๊ฒ ๊ฑธ๋ฆฐ ์๊ฐ์ ๊ตฌํ๋์ง๋ฅผ ์ฒดํฌํ๋ค.
์ด์ ์ ์๊ฐ์ ๊ตฌํ๊ณ ํ์ฌ ์๊ฐ์ด ๊ทธ ์๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด ํ์ธํ ํ์๊ฐ ์๋ค.
์ต์ํ์ผ๋ก ๊ตฌ์ฑ๋์๊ธฐ ๋๋ฌธ์ ํ์ฌ์๊ฐ์ด ์ต์์๊ฐ๋ณด๋ค ์์ ์๋ ์๋ค.
ํ์ฌ ์๊ฐ๊ณผ ์ต์์๊ฐ์ด ๊ฐ๊ณ ํ์ฌ์์น๊ฐ ๋์์ ์์น๋ผ๋ฉด ๋ฐฉ๋ฌธ ํ์๋ฅผ ++ํด์ค๋ค.๋ฐฉ๋ฌธ์ฒดํฌ
visited๋ฅผ ํตํด์ ๋ฐฉ๋ฌธํ ์์น๋ฅผ ์ฒดํฌํ์๋ค. ๋ฒ์๊ฐ 0์์ 100000๊น์ง์ด๊ธฐ ๋๋ฌธ์ํด๋น ์์น์ ๋ฐฉ๋ฌธ์ฌ๋ถ์ ๋ฒ์์ฒดํฌ
๋ฅผ ํด์ค๋ค.
๋์์ ์์น๋ ์ด์ ์ ๋ฐฉ๋ฌธํ์ด๋ ๋ฐฉ๋ฌธํ์๋ฅผ ๊ตฌํด์ผํ๊ธฐ ๋๋ฌธ์ visited[K] ์ํ๋ฅผ ๋ณ๊ฒฝ์ํค์ง ์๋๋ค. ์ด๋ฅผ ์ ์ธํ๋ฉด ์ผ๋ฐ์ ์ธ bfs๋ฌธ์ ์ ๊ฐ๋ค.
๐ฅ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import sys;input = sys.stdin.readline
from heapq import heappush, heappop
N, K = map(int, input().split())
answer = -1
cnt = 0
def bfs():
global answer, cnt
queue = []
visited = [False] * (100001)
queue.append((0, N))
visited[N] = True
while queue:
time, cur = heappop(queue)
if answer != -1 and time > answer:
return
if cur == K:
answer = time
cnt += 1
continue
visited[cur] = True
for nxt in [cur + 1, cur - 1, 2 * cur]:
if 0 <= nxt < 100001 and not visited[nxt]:
heappush(queue, (time + 1, nxt))
bfs()
print(answer)
print(cnt)
Comments powered by Disqus.