[๋ฐฑ์ค 1463๋ฒ] [๐ฅ3] 1๋ก ๋ง๋ค๊ธฐ (python)
๋ฌธ์
์ ์ X์ ์ฌ์ฉํ ์ ์๋ ์ฐ์ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ธ ๊ฐ์ง ์ด๋ค.
- X๊ฐ 3์ผ๋ก ๋๋์ด ๋จ์ด์ง๋ฉด, 3์ผ๋ก ๋๋๋ค.
- X๊ฐ 2๋ก ๋๋์ด ๋จ์ด์ง๋ฉด, 2๋ก ๋๋๋ค.
- 1์ ๋บ๋ค. ์ ์ N์ด ์ฃผ์ด์ก์ ๋, ์์ ๊ฐ์ ์ฐ์ฐ ์ธ ๊ฐ๋ฅผ ์ ์ ํ ์ฌ์ฉํด์ 1์ ๋ง๋ค๋ ค๊ณ ํ๋ค. ์ฐ์ฐ์ ์ฌ์ฉํ๋ ํ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 106๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์ N์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฐ์ฐ์ ํ๋ ํ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
2
์์ ์ถ๋ ฅ 1
1
์์ ์ ๋ ฅ 2
10
์์ ์ถ๋ ฅ 2
3
ํํธ
10์ ๊ฒฝ์ฐ์ 10 โ 9 โ 3 โ 1 ๋ก 3๋ฒ ๋ง์ ๋ง๋ค ์ ์๋ค.
๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋งํ๋ ๋ถ๋ถ
์ ํ์์ ์ฌ์ฉํด์ผ ํ๋ค. dp(n) = min (dp(n//3) +1, dp(n//2)+1 , dp(n-1)+1)
์ฝ๋
ver(1) - dp์ฌ์ฉ
n = int(input())
dp = [0] * 10000001
for i in range(2,n+1):
dp[i] = dp[i - 1] + 1
if i % 2 == 0:
dp[i] = min(dp[i], dp[i//2] + 1)
if i % 3 == 0:
dp[i] = min(dp[i], dp[i//3] + 1)
print(dp[n])
๋๊ธ๋จ๊ธฐ๊ธฐ