[λ°±μ€ 1463λ²-νμ΄μ¬]1λ‘ λ§λ€κΈ°
λ°±μ€ (BOJ) 1463λ²
https://www.acmicpc.net/problem/1463
μ¬μ©μΈμ΄ : PYTHON
1.λ¬Έμ
2.νμ΄
λ€μ΄λλ―Ή νλ‘κ·Έλλ° (Bottom up) λ°©μμΌλ‘ νμ΄μΌ νλ€.
2-1.μνμμ μΈμ°κΈ°
μνμμ μΈμ°λ μ¬κ³ μ μΆλ°μ μ 'μ΅μ ν΄μ μΌλΆλΆμ΄ κ·Έ λΆλΆμ λν μ΅μ ν΄μΈκ°?' λΌκ³ λ°°μ λ€.
μ μ Nμ 1λ‘ λ§λλ μ΅μ νμλ₯Ό ꡬνλ ν¨μλ₯Ό D(N)μ΄λΌκ³ νμ.
μ΅μ ν΄λ₯Ό μκ°ν΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
D(10)μ 10μ 2λ‘ λλ D(5)
μ, 10μμ 1μ λΊ D(9)
μ€ λ μμ κ° + 2λ‘ λλκ±°λ 1μ λΊ μ°μ°νμ 1
κ³Ό κ°λ€.
D(12)λ 12λ₯Ό 3μΌλ‘ λλ D(4)
μ, 12λ₯Ό 2λ‘ λλ D(5)
, 12μμ 1μ λΊ D(11)
μ€ λ μμκ° + μ°μ°μ νμ 1
κ³Ό κ°λ€.
'μ΅μ ν΄μ μΌλΆλΆμ΄ κ·Έ λΆλΆμ λν μ΅μ ν΄μΈκ°?'μ λν΄μ μκ°ν΄λ³΄λ©΄
μ΅μ ν΄D(10)μ μΌλΆλΆ D(5), D(9)λ κ·Έ λΆλΆμ λν μ΅μ ν΄κ° λ§λ€.
μ΅μ ν΄D(12)μ μΌλΆλΆ D(4), D(5), D(11)λ κ·Έ λΆλΆμ λν μ΅μ ν΄κ° λ§λ€.
μ΄μ μνμμ μΈμ보μλ€.
μ¬κΈ°μ μ£Όμν΄μΌ ν μ μ΄ μλλ° nμ΄ 3 λλ 2λ‘ λλ λ¨μ΄μ ΈμΌ D(n//3) λλ D(n//2)λ₯Ό ν μ μλ€.
2-2.base caseλ‘ μλ ΄νλμ§ νμΈ
μ κ·Έλ¦Όμμ D(n//3), D(n//2), D(n-1)μ base caseμΈ n==1μ΄λ n==2λ‘ μλ ΄νλ€.
2-3.μνμμ κ³μ°
bottom-up λ°©μ(μνμμ μ€λ₯Έμͺ½μ λ±μ₯νλ κ°μ΄ μΌμͺ½μ λ±μ₯νλ κ°λ³΄λ€ λ¨Όμ κ³μ°)μΌλ‘ μ°μ°μ νλ €λ©΄ λΉ¨κ°μ νμ΄νμ κ°μ΄ μΈλ±μ€ μ€λ¦μ°¨μμΌλ‘ κ³μ°νλ©΄ λλ€.
3.μ½λ
μνμμ bottom-up λ°©μμΌλ‘ κ³μ°νκΈ° μν΄μ forλ¬Έμ μ¬μ©νμ¬ κ΅¬ννλ©΄ λ€μκ³Ό κ°λ€.
μ΄λ -1μ°μ° d[i] = 1 + d[i-1]
μ μ΄λ€ μ μμ΄λμ§ κ°λ₯νκΈ° λλ¬Έμ μ μΌ μ²μ μννλλ‘ μμ±νλ€.
λ€μμΌλ‘ 3λλ 2λ‘ λλλ μ°μ°μ iκ° 3λλ 2λ‘ λλ λ¨μ΄μ ΈμΌ νκΈ°λλ¬Έμ ifλ¬ΈμΌλ‘ κ²μ¬λ₯Ό ν΄μ€¬λ€.
μΆκ°λ‘ minκ°μ ꡬνκΈ° μν΄ ifλ¬Έμ and 쑰건μΌλ‘ ν¬κΈ°λ₯Ό λΉκ΅νλ€.
import sys
input = sys.stdin.readline
N=int(input())
d=[0]*(N+1)
for i in range(1,N+1):
if i==1:
d[i]=0
elif i==2:
d[i]=1
else:
d[i] = 1 + d[i-1]
if i%3==0 and d[i]>1+d[i//3]:
d[i]=1+d[i//3]
if i%2==0 and d[i]>1+d[i//2]:
d[i]=1+d[i//2]
print(d[N])