๐๋ฌธ์
https://www.acmicpc.net/problem/1697
๐์ด๋ค ์๊ณ ๋ฆฌ์ฆ?
1. 1์ฐจ์์์์ bfs
2. 2์ฐจ์ ๋ฆฌ์คํธ์์ ์ํ์ข์ฐ์ ์์ง์์ ๋ณด์ฌ์ค ๊ธฐ์กด์ ๋ฌธ์ ๋ค๊ณผ ๋ฌ๋ฆฌ ์ด ๋ฌธ์ ์์๋ 1์ฐจ์์์ [-1,+1,*2]๋งํผ์ x์ขํ ์์ง์์ ๋ณด์ฌ์ค๋ค๊ณ ์ดํดํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๐ป์ฝ๋
from collections import deque
def bfs(x):
deq = deque()
deq.append(x)
while deq:
x = deq.popleft()
if x == k:
print(graph[x])
break
for i in [x-1,x+1,x*2]:
nx = i
if nx < 0 or nx > (100001)-1:
continue
if graph[nx] == 0:
graph[nx] = graph[x] + 1
deq.append(nx)
# print('graph:',graph)
# print('deq:',deq)
return
n,k = map(int,input().split()) # n:์๋น ์์น, k:๋์ ์์น
#graph
graph = [0 for i in range(100001)]
bfs(n)
๐์ฝ๋ ์ค๋ช
๋ฌธ์ ์ ์์๋ฅผ bfs๋ก ํ์ด๋ด๋ ๊ณผ์ ์ ์ด์ง ๋ณด์ฌ์ฃผ๋ฉด
1. [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...] 5๋ฒ์งธ idx๋ฅผ bfs์ ๋ฃ๊ณ ๋๋ฆฌ๋ฉด
2. [0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,...] ์ด๋ ๊ฒ 5๋ฒ์งธ idx(index)๋ฅผ ๊ธฐ์ค์ผ๋ก 4๋ฒ์งธ, 6๋ฒ์งธ, 10๋ฒ์งธ idx๊ฐ 1๋ก ๋ฐ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ 4๋ฒ์งธ 6๋ฒ์งธ 10๋ฒ์งธ idx๋ ํ์ ๋ค์ด๊ฐ ๋ค์์ -1,1,2๋ฐฐ ๊ฐ๊ฐ ํ๋ฒ์ฉ ๋ชจ๋ ์ด๋ํ๋ค.
3. [0,0,0,2,1,2,1,2,2,2,1,2,2,0,0,0,0,0,0,0,2,...]
4. [0,0,3,2,1,2,1,2,2,2,1,2,2,3,3,0,3,0,3,3,2,...]
5. [0,4,3,2,1,2,1,2,2,2,1,2,2,3,3,4,3,4,3,3,2,...] ์ด์๊ฐ์ด ๋ฐ๋ณตํ๋ค๋ณด๋ฉด ๊ฒฐ๊ตญ 17๋ฒ์งธ idx์ ๊ฐ์ฅ ์ต์ ์ ํ์๊ฐ ์ ๋ ฅ๋๋ค.
bfs๋ฅผ ๋ ์ฌ๋ ธ๋ค๋ฉด, ๋ค์์ผ๋ก ์๊ฐํด๋ณผ ๋งํ ๊ฒ์ด 'graph์ ๋ฒ์๋ฅผ ์ด๋ป๊ฒ ํ ๊ฒ์ธ์ง'์ด๋ค. [๋ค๋ก ํ ์นธ, ์์ผ๋ก ํ ์นธ, ์์ผ๋ก ๋ ๋ฐฐ] ์ด๋ ๊ฒ ์ธ ์์ง์๋ง์ ๋ณด์ฌ์ค๋ค๋ฉด ์์ผ๋ก ๊ฐ๊ธฐ๋ ์ฌ์๋ ๋ค๋ก ๊ฐ๊ธฐ๋ ์ด๋ ค์ฐ๋ฏ๋ก ๋์์ ์ง๋์น ๋ค์ -1์ ์ฌ๋ฌ๋ฒ ํด์ ์ฌ ๋ฐ์ ์ต๋ํ ๋ฏธ๋ฆฌ -1์ ์ด์ฉํด 2๋ฐฐ ๋งํผ์ฉ ์์ผ๋ก ์ค๊ฒ ๊ตฌ๋ ์ถ์๋ค. ๋ฐ๋ผ์ ๋์์ ์ต๋ ๋ฒ์ ๋งํผ 100001์ ์ค์ ํด์คฌ๋ค.
if x==k: ๋ฅผ ์ด์ฉํด์ ํ์ถํ๋ ๋ฌธ์ฅ์ด ์ ์์น์ ์๋ ์ด์ ๋ ๊ฐ์ ๊ฐ์ ๋ฃ์์ ๋ 0์ ๊ฐ์ ๋ฑ์ด๋ด๊ธฐ ์ํด์์ด๋ค.
ex) 5 5 ๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ผ๋ฉด 0์ ์ถ๋ ฅํด์ผํ๋ค.
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 12904 A์ B (ํ์ด์ฌ/python) (0) | 2023.07.11 |
---|---|
[๋ฐฑ์ค] 7562 ๋์ดํธ์ ์ด๋ (ํ์ด์ฌ/python) (0) | 2023.07.11 |
[๋ฐฑ์ค] 2798 ๋ธ๋์ญ (ํ์ด์ฌ/python) (0) | 2023.06.19 |
[๋ฐฑ์ค] 5622 ๋ค์ด์ผ (ํ์ด์ฌ/python) (0) | 2023.06.19 |
[๋ฐฑ์ค] 1546 ํ๊ท (ํ์ด์ฌ/python) (0) | 2023.06.19 |