1463๋ฒ - 1๋ก ๋ง๋ค๊ธฐ
์ธ ๊ฐ์ง ์ฐ์ฐ์ ์ฌ์ฉํด์ ์ฃผ์ด์ง ์๋ฅผ ์ต๋ํ ์ ๊ฒ ์ฐ์ฐํ์ฌ 1๋ก ๋ง๋ค๋, ์ฐ์ฐ์ ํ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค.
์ด ๋ฌธ์ ๋ ์ ํ์์ด ์ฃผ์ด์ ธ ์๋ค๊ณ ๋ด์ผํฉ๋๋ค.
์ธ ๊ฐ์ง ์ฐ์ฐ, 3๋๋๊ธฐ, 2๋๋๊ธฐ, 1๋นผ๊ธฐ๋ฅผ ์ ํ์์ผ๋ก์จ ์ธ์ธ ์ ์์ผ๋ฉด ํ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
1. 3๋๋๊ธฐ
dp(9) = dp(3) + 1 ์ด๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ฉฐ, dp[i] = dp[i//3] + 1์ ๋์ถํ ์ ์์ต๋๋ค.
2. 2๋๋๊ธฐ
dp(4) = dp(2) + 1 ์ด๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ฉฐ, dp[i] = dp[i//2] + 1์ ๋์ถํ ์ ์์ต๋๋ค.
3. 1๋นผ๊ธฐ
dp[2] = dp[1] + 1 ์ด๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ฉฐ, dp[i] = dp[i-1] + 1์ ๋์ถํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ dp(N)์ ๊ฒฐ๊ณผ๊ฐ์ ์ ์ผ ์ ์ ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ N์ 1๋ก ๋ง๋๋๋ฐ ๋๋ ์ฐ์ฐ์์ด๋ฏ๋ก, ์ ์ธ ๊ฒฝ์ฐ ์ค ์ ์ผ ์ ์ ์ฐ์ฐ์ ์ฌ์ฉํ ๊ฒ์ ํ๋ ๊ผฝ์ ํ์ฌ ์กฐ์ฌ์ค์ธ ์์ ๋์ ํ๋ฉด ๋๊ฒ ์ต๋๋ค.
์ ํ์ : min(dp[i] = dp[i//3] + 1,dp[i] = dp[i//2] + 1,dp[i] = dp[i-1] + 1)
์์ ์ ํ์์ฒ๋ผ min์ผ๋ก ๋น๊ตํ์ฌ ๋ฃ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ํ๋์ฉ ๋น๊ตํ๋ฉฐ ์ฝ๋ฉํ๋ฉด ๋ฉ๋๋ค.
dp = [0]*1000010
dp[1] = 0
N = int(input())
dp๋ฐฐ์ด์ ํ๋ ์ ์ธํด์ฃผ๊ณ N์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
for i in range(2,N+1):
dp[i] = dp[i-1] + 1
์ผ๋จ 1๋บ ๊ฒฝ์ฐ๋ฅผ dp[i]์ ๋ฃ์ด์ค์๋ค. ๋ญ ๋จผ์ ํ๋ ์๊ด์์ต๋๋ค.
if i%3==0:
dp[i] = min(dp[i//3]+1,dp[i])
๊ทธ๋ฆฌ๊ณ ํด๋น 3๋๋ ๊ฒฝ์ฐ๋ 1๋บ ๊ฒฝ์ฐ๋ ๋น๊ตํด์ ๋ ์์๊ฑธ dp[i]์ ๋ฃ์ด์ค๋๋ค.
if i%2==0:
dp[i] = min(dp[i//2]+1,dp[i])
๋ง์ง๋ง์ผ๋ก 2๋๋ ๊ฒฝ์ฐ๋ ๋ฐฉ๊ธ ์ ์ dp[i]์ ๋ฃ์ ๊ฐ์ด๋ ๋น๊ตํด์ ๋ ์์ ๊ฑธ dp[i]์ ๋ฃ์ด์ค๋๋ค.
print(dp[N])
๋ง์ง๋ง์ผ๋ก dp[N]์ ์ถ๋ ฅํด์ฃผ์๋ฉด ๋ฉ๋๋ค.