๐๋ฌธ์
https://www.acmicpc.net/problem/1463
๐์ด๋ค ์๊ณ ๋ฆฌ์ฆ?
1. bfs, dp
2. ์ฌ์ค ๊ฐ์ฅ ๋จผ์ ์๊ฐ๋ ๊ฒ์ bfs์ด๋ค. 1์ฐจ์ ๋ฆฌ์คํธ์์ “์ต์ ๋ช๋ฒ ~๋ฅผ ํด์ผํ๋์ง ๊ตฌํ์์ค”์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋์์ ๊ฒฝ์ฐ bfs๋ฅผ ๋ ์ฌ๋ฆด ์ ์๋๋ก ๊ณต๋ถํ๊ธฐ ๋๋ฌธ์ด๋ค.
3. ํ์ง๋ง ์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ dp๋ฅผ ์ด์ฉํ๋ฉด ๋ ๋น ๋ฅด๊ฒ ๋์ํ๋ค.
bfs : 852ms
dp : 644ms
4. ๋ฐ์ dp์ bfs๋ก ๋ชจ๋ ํ์ด๋ณด๊ณ ์์ธํ ์ค๋ช ์ ์ฒจ๋ถํ๋ค.
๐ป dp ์ฝ๋
# 1463 1๋ก ๋ง๋ค๊ธฐ (dp ์ฌ์ฉ)
# 1. ์
๋ ฅ ๋ฐ๊ธฐ
n = int(input())
dp = [0 for _ in range(n+1)]
for i in range(2,n+1):
dp[i] = dp[i-1] + 1
'''
์ฐ๋ฆฌ๋ 1๋ถํฐ n์ ์ฐพ์๊ฐ๋ ๋ฐฉ์์ ์ด์ฉํ ๊ฑด๋ฐ,
4๋ฅผ ์๋ก ๋ค๋ฉด, 4๊ฐ ๋๋ ค๋ฉด 1์ฉ ๋ํด์
1->2->3->4์ ๊ณผ์ ์ ํตํด์ ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ ํ์๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
0 1 2 3
๊ทธ๋ฐ๋ฐ 4๋ 2๋ก ๋๋์ด ๋จ์ด์ง๋ฏ๋ก 2์์ 4๋ก ๋ฐ๋ก ์ฌ ์ ์๋ค. -> min(3,2)๋ฅผ ํตํด 2๊ฐ ๋จ
๋ํ 4๋ 3์์ 1์ ๋ํจ์ผ๋ก์จ 2๋ฒ๋ง์ ์ฌ ์ ์๋ค. -> min(2,2)๋ฅผ ํตํด 2๋ก ์ต์ข
๊ฒฐ์ ๋จ
1->2->3->4
0 1 1 2
์ด๋ ๊ฒ ์ต์
์ ์ฐ์ฐ ํ์(3)๊ณผ ๋ ์ ์ ์ฐ์ฐํ์(2)๋ฅผ min()ํจ์๋ฅผ ํตํด
๋น๊ตํ ํ, ๋ ์ ์ ์ฐ์ฐํ์๋ฅผ ์ฑํํด ์ค์ผ๋ก์จ ์ต์๊ฐ์ ์ป์ ์ ์๋ค.
'''
if i%2 == 0: # 2๋ก ๋๋์ด ๋จ์ด์ง๋ฉด
dp[i] = min(dp[i],dp[i//2]+1)
if i%3 == 0: # 3์ผ๋ก ๋๋์ด ๋จ์ด์ง๋ฉด
dp[i] = min(dp[i],dp[i//3]+1)
print(dp)
print(dp[n])
๐์ฝ๋ ์ค๋ช
์ฐ๋ฆฌ๋ 1๋ถํฐ n์ ์ฐพ์๊ฐ๋ ๋ฐฉ์์ ์ด์ฉํ ๊ฑด๋ฐ,
4๋ฅผ ์๋ก ๋ค๋ฉด, 4๊ฐ ๋๋ ค๋ฉด 1์ฉ ๋ํด์
1->2->3->4์ ๊ณผ์ ์ ํตํด์ ๊ฐ๊ฐ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ ํ์๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
0 1 2 3
๊ทธ๋ฐ๋ฐ 4๋ 2๋ก ๋๋์ด ๋จ์ด์ง๋ฏ๋ก 2์์ 4๋ก ๋ฐ๋ก ์ฌ ์ ์๋ค.
1->2->3->4
0 1 2 2 ๊ฐ ๋๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ต์ ์ ์ฐ์ฐ ํ์(3)๊ณผ ๋ ์ ์ ์ฐ์ฐํ์(2)๋ฅผ min()ํจ์๋ฅผ ํตํด
๋น๊ตํ ํ, ๋ ์ ์ ์ฐ์ฐํ์๋ฅผ ์ฑํํด ์ค์ผ๋ก์จ ์ต์๊ฐ์ ์ป์ ์ ์๋ค.
๐ป bfs ์ฝ๋
from collections import deque
def bfs(x):
deq = deque()
deq.append(x)
while deq:
x = deq.popleft()
if x == n:
print(graph[x])
return
for i in [2*x,3*x,x+1]:
if i > n:
continue
if graph[i] == 0:
graph[i] = graph[x]+1
deq.append(i)
return
# 1. ์
๋ ฅ ๋ฐ๊ธฐ
n = int(input())
graph = [0 for _ in range(n+1)]
# 3. ํ์
bfs(1)
print(graph)
๐์ฝ๋ ์ค๋ช
1๋ถํฐ ์์ํด์ [2*x, 3*x, x+1] ์ธ ๋ฐฉ๋ฒ์ ๋์๊ฐ๋ฉด์ ์ํํ๋๋ฐ, ๊ฐ ์๋ฆฌ์ ์ต์๊ฐ์ด ๋จผ์ ๋ค์ด๊ฐ๊ฒ ๋๋ฏ๋ก
ํ๋ฒ๋ ๊ฑฐ์น์ง ์์ ๋น ๊ณต๊ฐ์ธ์ง๋ง์ ํ๋จํด ์ฃผ๋ฉด ๋๋ค.
1->2->3->4->5->6
0 1 1 2 3 2
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 14940 ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ(ํ์ด์ฌ/python) (0) | 2023.08.15 |
---|---|
[๋ฐฑ์ค] 2194 ์ ๋ ์ด๋์ํค๊ธฐ (ํ์ด์ฌ/python) bfs (0) | 2023.08.14 |
[๋ฐฑ์ค] 7576 ํ ๋งํ (ํ์ด์ฌ/python) (0) | 2023.08.02 |
[๋ฐฑ์ค] 1992 ์ฟผ๋ํธ๋ฆฌ (ํ์ด์ฌ/python) (0) | 2023.07.12 |
[๋ฐฑ์ค] 12904 A์ B (ํ์ด์ฌ/python) (0) | 2023.07.11 |