๋ฌธ์ ๋งํฌ: www.acmicpc.net/problem/1463
๋ฌธ์ ์ค๋ช
์๊ฐ ๋ด์ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์ ๋์ ๊ณํ๋ฒ(Dynamic Programming)์ ์ด์ฉํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค.
1๋ก ๋ง๋ค๊ธฐ ์ํ ์ฐ์ฐ ํ์๋ฅผ ์ ์ฅํ๋ dpํ ์ด๋ธ์ ๋ง๋ค๊ณ dp[1]๋ถํฐ dp[n]๊น์ง๋ฅผ ๊ณ์ฐํ๋ค.
dp[1] = 0
dp[2] = dp[1] + 1 // 2๋ก ๋๋๊ฑฐ๋ 1์ ๋นผ๊ธฐ
dp[3] = dp[1] + 1 // 3์ผ๋ก ๋๋๊ธฐ
dp[4] = dp[2] + 1 = dp[3] + 1 // 2๋ก ๋๋๊ฑฐ๋ 1์ ๋นผ๊ธฐ
dp[5] = dp[4] + 1 // 1์ ๋นผ๊ธฐ
dp[6] = dp[2] + 1 = dp[3] + 1 // 2๋ก ๋๋๊ฑฐ๋ 3์ผ๋ก ๋๋๊ธฐ
.
.
์ด๋ ์ฃผ์ํ ์ ์ dp[6] ๊ฐ์ ๊ฒฝ์ฐ 3์ผ๋ก๋ ๋๋ ์ง๊ณ 2๋ก๋ ๋๋ ์ง๊ณ 1์ ๋นผ๋ ์ฐ์ฐ๋ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ด ์ค์์ ์ฐ์ฐ ํ์๊ฐ ์ต์๊ฐ ๋๋ ๊ฒฝ์ฐ๋ฅผ dp์ ์ ์ฅํด์ผ ํ๋ค. ์ฝ๋์์๋ minํจ์๋ฅผ ์ด์ฉํด ์ด๋ฅผ ๊ตฌํํ๋ค.
์์ค์ฝ๋
n = int(input())
INF = 987654321
# 1๋ก ๋ง๋ค๊ธฐ ์ํ ์ฐ์ฐ ํ์๋ฅผ ์ ์ฅํ๋ dp ํ
์ด๋ธ
dp = [INF] * (n + 1)
dp[1] = 0
for i in range(2, n + 1):
# 3์ผ๋ก ๋๋๋ ์ฐ์ฐ
if i % 3 == 0:
dp[i] = min(dp[i], dp[i // 3] + 1)
# 2๋ก ๋๋๋ ์ฐ์ฐ
if i % 2 == 0:
dp[i] = min(dp[i], dp[i // 2] + 1)
# 1์ ๋นผ๋ ์ฐ์ฐ
dp[i] = min(dp[i], dp[i - 1] + 1)
print(dp[n])
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค(BOJ) / Python] 1010๋ฒ: ๋ค๋ฆฌ ๋๊ธฐ (0) | 2021.03.30 |
---|---|
[๋ฐฑ์ค (BOJ) / Python] 18352๋ฒ: ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (0) | 2021.03.30 |
[๋ฐฑ์ค(BOJ) / Python] 10026๋ฒ: ์ ๋ก์์ฝ (0) | 2021.03.16 |
[๋ฐฑ์ค(BOJ) / Python] 1260๋ฒ: DFS์ BFS (0) | 2021.03.15 |
[๋ฐฑ์ค(BOJ) / Python] 1946๋ฒ: ์ ์ ์ฌ์ (0) | 2021.03.09 |