https://www.acmicpc.net/problem/13549
ํ์ด ๊ณผ์
1697 - ์จ๋ฐ๊ผญ์ง ๋ฌธ์ ์ ๋น์ทํ๋ค. ์ฐจ์ด์ ์ ์จ๋ฐ๊ผญ์ง 3 ๋ฌธ์ ๋ ์๊ฐ์ด๋ํ ๋ 0์ด ์์๋๋ค.
์จ๋ฐ๊ผญ์ง ๋ฌธ์ ๋ฅผ ์์ ์ ํ์ด์ ๋ ๋ก ๋จน์ผ๋ ค ์๊ฐ์ด๋ ๋ถ๋ถ๋ง ์ฝ๋๋ฅผ ์์ ํ๋๋ฐ ํ๋ ธ๋ค.
๋ค์ ์ง์ผํ๋ ์ถ์๋๋ฐ ์กฐ๊ธ๋ง ์์ ํ๋๊น ํด๊ฒฐ๋๋ค. bfs๋ก ํด๊ฒฐํจ.
from collections import deque
N , K = map(int,input().split())
deq = deque()
deq.append([N,0])
visited = [N]
while True:
X = deq.popleft()
posi = X[0]
second = X[1]
if posi == K:
print(second)
break
if posi * 2 >= 0 and posi * 2 <= 100000 and posi * 2 not in visited:
visited.append(posi * 2)
deq.append([posi * 2,second])
if posi - 1 >= 0 and posi - 1 <= 100000 and posi - 1 not in visited:
visited.append(posi - 1)
deq.append([posi - 1,second + 1])
if posi + 1 >= 0 and posi + 1 <= 100000 and posi + 1 not in visited:
visited.append(posi + 1)
deq.append([posi + 1,second + 1])
ํ์์ pop๋ฅผ ํ ๊ฐ์ ๋ฐ๋ผ posi * 2, posi - 1, posi + 1์ ๊ฐ ์กฐ๊ฑด์ ํ์ธํด์ ํ์ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
์ฃผ์ํ ์ ์ ํ์ ์ถ๊ฐํ ๋ ์๊ฐ ์ด๋ํ๋ ๋ถ๋ถ์ ๋จผ์ ๋ฃ์ด์ค์ผ ํ๋ค.
์๋ฅผ ๋ค์ด N๊ณผ K ๊ฐ์ด 3, 5 ์ธ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์
ํ์์ X - 1, X + 1, X * 2 ์์ผ๋ก bfs ํ๋ฉด
3
2 4 6
1 (3) (4) / (3) 5 8 / (5) 7 12 //๊ดํธ๋ ์ด๋ฏธ ๋ฐฉ๋ฌธํด์ ๋ฐฉ๋ฌธ ์ ํจ.
์์ ๊ฐ์ด ๋ฐฉ๋ฌธํ๋ฉด ๊ฑธ๋ฆฐ ์๊ฐ์ +1 +1 ์ด๋ฏ๋ก 2๋ฅผ ์ถ๋ ฅํ๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํ์์ X * 2, X - 1, X + 1 ์์ผ๋ก ํ๋ฉด
3
6 2 4
12 5 7 / 8 (3) (5) / (4) 1 (3)
์์ ๊ฐ์ด ๋ฐฉ๋ฌธํ๋ฉด ์๊ฐ์ด๋์ 0์ด ์ด๋ฏ๋ก 1์ ์ถ๋ ฅํ๋ค.
๋ฐ๋ผ์ 0์ด ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด๋์ ๋จผ์ ๋ฐฉ๋ฌธํด์ผ ๋๋ค.
๋๋จธ์ง๋ ์จ๋ฐ๊ผญ์ง 1๊ณผ ๋๊ฐ์.
์ ์ฒด ์ฝ๋๋ ์
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1655 ๊ฐ์ด๋ฐ๋ฅผ๋งํด์ (python ํ์ด์ฌ) (0) | 2022.06.14 |
---|---|
[๋ฐฑ์ค] 7569 ํ ๋งํ (python ํ์ด์ฌ) (0) | 2022.06.14 |
[๋ฐฑ์ค] 2252 ์ค์ธ์ฐ๊ธฐ (python ํ์ด์ฌ) (0) | 2022.06.11 |
[๋ฐฑ์ค] 11718 ๊ทธ๋๋ก ์ถ๋ ฅํ๊ธฐ (python ํ์ด์ฌ) (0) | 2022.06.10 |
[๋ฐฑ์ค] 1005 ACMCraft (python ํ์ด์ฌ) (0) | 2022.06.10 |