πλ¬Έμ νμνκΈ°
μ μ n(11λ³΄λ€ μμ μμ)μ΄ μ£Όμ΄μ‘μ λ, nμ 1, 2, 3μ ν©μΌλ‘ λνλ΄λ λ°©λ²μ μ ꡬνκΈ°
μκ³ λ¦¬μ¦ μ ν
nμ λ²μκ° μλΉν μκΈ° λλ¬Έμ ν¨μ¨μ μΈ μκ³ λ¦¬μ¦μ κ³ λ €ν νμλ μλ€. λ€λ§, nμ΄ 4μΌ λ 1, 2, 3μ ν©μΌλ‘ λνλ΄λ λ°©λ²μ ꡬνκΈ° μν΄ nμ΄ 1μΌ λ, nμ΄ 2μΌ λ, nμ΄ 3μΌ λμ κ²°κ³Όλ₯Ό μ΄μ©ν μ μλ€λ κ²μ κ³ λ €νλ€λ©΄, μ΄ λ¬Έμ λ μ νμ μΈ DP(λμ κ³νλ²) λ¬Έμ λ€. μ¦, μμ λ¬Έμ μ ν΄λ₯Ό μ΄μ©ν΄μ ν° λ¬Έμ μ ν΄λ₯Ό ꡬνλ λ¬Έμ λ‘, μ νμμ μΈμΈ μ μμ΄μΌνλ€.
DPλ‘ ν μ μλ?
- μ€λ³΅λλ νμ λ¬Έμ κ° μλκ°?
- ν° λ¬Έμ λ₯Ό μμ λ¬Έμ λ‘ λλμμ λ, μμ λ¬Έμ κ° μ¬λ¬ λ² μ¬μ©λλκ°?
- ν΄λΉ λ¬Έμ λ μμ μ«μ(1,2,3)λ₯Ό λ§λλ λ°©λ²μ ν° μμ μ¬μ¬μ©ν μ μλ€.
- μ¬κ·μ κ΄κ³, μ νμμ μ€μ ν μ μλκ°?
- λ¬Έμ λ₯Ό ν΄κ²°ν λ μ΄μ μνμ κ°μ μ΄μ©ν΄ νμ¬ μνμ κ°μ κ³μ°ν μ μλκ°?
- κ²°κ³Όλ₯Ό μ μ₯νμ¬ μ¬μ¬μ©ν μ μλ λ¬Έμ μΈκ°?
- μ¬κ· λ°©μμΌλ‘ κ°μ μ μ₯νλ memoizationμ΄λ λ°λ³΅λ¬ΈμΌλ‘ ν μ΄λΈμ μ±μ°λ tabulationμ μ¬μ©ν μ μλ λ°©μμΈκ°?
μ νμ μΈμ°κΈ°
- n=1, 2, 3μΌ λ, 1, 2, 3μ ν©μΌλ‘ νννλ λ°©λ²μ μλ μλμ κ°λ€
- n=1, 1 => 1
- n=2, 2 = 1+1 => 2
- n=3, 3 = 2+1 = 1+2 = 1+1+1 => 4
n=4
μΌ λ, 1,2,3μ ν©μΌλ‘ νννλ λ°©λ²μ μλμ κ°λ€n=1
μΌλ λ°©λ² xn=3
μΌ λ λ°©λ²n=2
μΌ λ λ°©λ² xn=2
μΌ λ λ°©λ²n=3
μΌ λ λ°©λ² xn=1
μΌ λ λ°©λ²- μ¦,
n=4
μΌ λ, λ°©λ²μ μλ 1x1 + 1x2 + 1x4 = 7μ΄λ€.
n=5
μΌ λ, 1,2,3μ ν©μΌλ‘ νννλ λ°©λ²μ μλμ κ°λ€.n=1
μΌλ λ°©λ² xn=4
μΌ λ λ°©λ²n=2
μΌ λ λ°©λ² xn=3
μΌ λ λ°©λ²n=3
μΌ λ λ°©λ² xn=2
μΌ λ λ°©λ²- μ¦
n=5
μΌ λ λ°©λ²μ μλ 1x7 + 1x4 + 1x2 = 13μ΄λ€.
- μμ κ²½μ°λ₯Ό λ΄€μ λ, n=1, n=2, n=3μΌλ λ°©λ²μ μλ λͺ¨λ 1μ΄λ―λ‘ nμμ 1, 2, 3 κ°κ°μ λΊ μμ λ°©λ²μ λνλ©΄ λ΅μ΄ λμ€λ κ²μ μ μ μλ€. λ°λΌμ, nμ 1, 2, 3μ ν©μΌλ‘ λνλ΄λ λ°©λ²μ μλ nμ 1, 2, 3μΌλ‘ λΊ μ κ°κ°μ 1, 2, 3μΌλ‘ λνλ΄λ λ°©λ²μ μλ₯Ό λͺ¨λ λν κ°μ΄λ€.
- μ νμ :
dp[n] = dp[n-1] + dp[n-2] + dp[n-3]
π μ½λ μ€κ³νκΈ°
1. 1λΆν° 10κΉμ§μ μλ₯Ό 1,2,3μΌλ‘ λνλ΄λ λ°©λ²μ μλ₯Ό μ μ₯ν 리μ€νΈ dpλ₯Ό λ§λ λ€.
2. μ½κ² λ΅μ μ μ μλ dp[1], dp[2], dp[3]μ κ°κ° 1, 2, 4λ‘ μ μ₯νλ€.
3. ν μ€νΈ μΌμ΄μ€ κ°μ(T)λ₯Ό μ λ ₯λ°λλ€.
4. iκ° 4λΆν° 10κΉμ§μΌ λ λμ λ°λ³΅λ¬Έμ λλ©΄μ, dp[i-1]+dp[i-2]+dp[i-3]μ κ³μ°νμ¬ dp[i]μ μ μ₯νλ€.
5. ν μ€νΈ μΌμ΄μ€ κ°μλ§νΌ nμ μ λ ₯λ°κ³ , dp[n]μ μΆλ ₯νλ€.
π μ λ΅ μ½λ
dp = [0,1,2,4] + [0]*7
for i in range(4, 11):
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
T = int(input())
for _ in range(T):
print(dp[int(input())])
728x90