λ¬Έμ
μ μ 4λ₯Ό 1, 2, 3μ ν©μΌλ‘ λνλ΄λ λ°©λ²μ μ΄ 4κ°μ§κ° μλ€. ν©μ λνλΌ λλ μλ₯Ό 1κ° μ΄μ μ¬μ©ν΄μΌ νλ€. ν©μ μ΄λ£¨κ³ μλ μμ μμλ§ λ€λ₯Έ κ²μ κ°μ κ²μΌλ‘ μΉλ€.
- 1+1+1+1
- 2+1+1 (1+1+2, 1+2+1)
- 2+2
- 1+3 (3+1)
μ μ nμ΄ μ£Όμ΄μ‘μ λ, nμ 1, 2, 3μ ν©μΌλ‘ λνλ΄λ λ°©λ²μ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ ν μ€νΈ μΌμ΄μ€μ κ°μ Tκ° μ£Όμ΄μ§λ€. κ° ν μ€νΈ μΌμ΄μ€λ ν μ€λ‘ μ΄λ£¨μ΄μ Έ μκ³ , μ μ nμ΄ μ£Όμ΄μ§λ€. nμ μμμ΄λ©° 10,000λ³΄λ€ μκ±°λ κ°λ€.
μΆλ ₯
κ° ν μ€νΈ μΌμ΄μ€λ§λ€, nμ 1, 2, 3μ ν©μΌλ‘ λνλ΄λ λ°©λ²μ μλ₯Ό μΆλ ₯νλ€.
μμ μ λ ₯ 1
3
4
7
10
μμ μΆλ ₯ 1
4
8
14
λμ νμ΄
λ¬Έμ μ€λͺ λ° ν΄κ²° λ°©λ²
μ΄ λ¬Έμ λ DP(Dynamic Programming)λ‘ ν΄κ²°ν μ μμ΅λλ€.
λ€λ§, μ νμμ λμΆνλ κ³Όμ μ΄ μ΄λ €μ λ κ΄κ³λ‘ μΈν°λ·μ μ°Έκ³ νμ¬ λ¬Έμ λ₯Ό ν΄κ²°νκ² λμμ΅λλ€.
λ¬Έμ 쑰건
1, 2, 3λ§μ μ¬μ©νμ¬ μ£Όμ΄μ§ μ«μλ₯Ό λ§λλ λ°©λ²μ μλ₯Ό ꡬν©λλ€.
μ¬κΈ°μ μ€μν μ μ κ°μ μ«μ μ‘°ν©μ΄λΌλ μμκ° λ€λ₯΄λ©΄ λμΌν κ²½μ°λ‘ κ°μ£Όνλ€λ κ²μ λλ€.
μλ₯Ό λ€μ΄, 1+1+2μ 1+2+1μ κ°μ μ‘°ν©μΌλ‘ λ΄ λλ€. λ°λΌμ μ‘°ν©μ μ«μλ₯Ό μ€λ¦μ°¨μμΌλ‘ λμ΄ν΄ λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€.
μμ : μ«μ 7μ λ§λλ κ²½μ°
μ«μ 7μ 1, 2, 3μ μ΄μ©ν΄ λ§λλ κ²½μ°λ₯Ό λμ΄νλ©΄ λ€μκ³Ό κ°μ΅λλ€.
- 1+1+1+1+1+1+1
- 1+1+1+1+1+2
- 1+1+1+2+2
- 1+2+2+2
- 1+1+1+1+3
- 1+1+2+3
- 2+2+3
- 1+3+3
μ΄μ²λΌ, λ§μ§λ§ μ«μκ° λͺμΈμ§μ λ°λΌ μ‘°ν©μ μ μ½μ΄ λ¬λΌμ§λλ€.
μλ₯Ό λ€μ΄:
- λ§μ§λ§ μ«μκ° 2λΌλ©΄, μμ μ«μλ 2 μ΄νλ§ κ°λ₯ν©λλ€. (3μ΄ μ¬ μ μμ)
- λ§μ§λ§ μ«μκ° 1μ΄λΌλ©΄, λͺ¨λ μ«μκ° 1λ‘λ§ μ΄λ£¨μ΄μ§ μ‘°ν©μ΄ λ©λλ€.
μ νμ λμΆ κ³Όμ
μμ μ«μλΆν° μ μ§μ μΌλ‘ κ²½μ°μ μλ₯Ό κ³μ°νλ λ°ν μ λ°©μμΌλ‘ ν΄κ²°ν©λλ€.
μ«μ nμ λ§λλ κ²½μ°μ μλ₯Ό dp[n]μ΄λΌ μ μν©λλ€.
μ¬κΈ°μ dp[n][k]λ μ«μ nμ λ§λ€ λ λ§μ§λ§ μ«μκ° kμΈ κ²½μ°μ μλ₯Ό λνλ λλ€.
κΈ°λ³Έ κ·μΉ
- μ«μ nμ λ§λλ λ°©λ²μ μ΄ κ²½μ°μ μλ, dp[n][1], dp[n][2], dp[n][3]μ ν©μ
λλ€.
μ¦, dp[n]=dp[n][1]+dp[n][2]+dp[n][3] - dp[n][k]λ λ€μκ³Ό κ°μ΄ κ³μ°λ©λλ€.
- λ§μ§λ§ μ«μκ° 1μΈ κ²½μ°: dp[n][1]=dp[n−1][1]
- λ§μ§λ§ μ«μκ° 2μΈ κ²½μ°: dp[n][2]=dp[n−2][1]+dp[n−2][2]
- λ§μ§λ§ μ«μκ° 3μΈ κ²½μ°: dp[n][3]=dp[n−3][1]+dp[n−3][2]+dp[n−3][3]
νλ‘ λ³΄λ κ³Όμ μμ
μλ νλ μ«μλ₯Ό 1~7κΉμ§ λ§λ€κΈ° μν κ²½μ°μ μλ₯Ό κ³μ°ν κ³Όμ μ λνλ λλ€.
μ«μ | λ§μ§λ§ μ«μκ° 1μΈ κ²½μ° | λ§μ§λ§ μ«μκ° 2μΈ κ²½μ° | λ§μ§λ§ μ«μκ° 3μΈ κ²½μ° | dp[n] |
1 | 1 | 0 | 0 | 1 |
2 | 1 | 1 | 0 | 2 |
3 | 1 | 1 | 1 | 3 |
4 | 1 | 2 | 1 | 4 |
5 | 1 | 2 | 2 | 5 |
6 | 1 | 3 | 3 | 7 |
7 | 1 | 3 | 4 | 8 |
μμ νμ΄
μ«μ 7μ ꡬνλ λ°©λ²μ μλ‘ λ€μ΄λ³΄κ² μ΅λλ€.
- λ§μ§λ§ μ«μκ° 1μΈ κ²½μ°:μ«μ 6μ λ§λ€ λ λ§μ§λ§ μ«μκ° 1μΈ κ²½μ°μ 1μ λνλ©΄ λ©λλ€.
λ°λΌμ, dp[7][1]=dp[6][1]=1 - λ§μ§λ§ μ«μκ° 2μΈ κ²½μ°:μ«μ 5λ₯Ό λ§λ€ λ λ§μ§λ§ μ«μκ° 1 λλ 2μΈ κ²½μ°μ 2λ₯Ό λνλ©΄ λ©λλ€.
λ°λΌμ, dp[7][2]=dp[5][1]+dp[5][2]=1+2=3 - λ§μ§λ§ μ«μκ° 3μΈ κ²½μ°:μ«μ 4λ₯Ό λ§λ€ λ λ§μ§λ§ μ«μκ° 1, 2, 3μΈ κ²½μ°μ 3μ λνλ©΄ λ©λλ€.
λ°λΌμ, dp[7][3]=dp[4][1]+dp[4][2]+dp[4][3]=1+2+1=4 - μ«μ 7μ μ΄ κ²½μ°μ μ: dp[7]=dp[7][1]+dp[7][2]+dp[7][3]=1+3+4=8
μ½λ
μ μ νμμ λ°νμΌλ‘ DP λ°°μ΄μ μ±μ°λ©΄, μ«μ nμ λ§λλ λͺ¨λ κ²½μ°μ μλ₯Ό ν¨μ¨μ μΌλ‘ ꡬν μ μμ΅λλ€.
μ΄λ₯Ό μ½λλ‘ κ΅¬ννλ©΄ λ€μκ³Ό κ°μ΅λλ€.
tc = int(input())
arr = list()
for _ in range(tc):
arr.append(int(input()))
mx = max(arr)
# DP λ§λ€κΈ°
dp = list()
for _ in range(mx):
dp.append([0] * 3)
dp[0][0] = 1
dp[1][0] = 1
dp[1][1] = 1
dp[2][0] = 1
dp[2][1] = 1
dp[2][2] = 1
# μ νμμ μν κ³μ°
if mx > 2:
for i in range(3, mx):
dp[i][2] = dp[i-3][2] + dp[i-3][1] + dp[i-3][0]
dp[i][1] = dp[i-2][1] + dp[i-2][0]
dp[i][0] = dp[i-1][0]
# μ λ΅
for i in arr:
print(dp[i-1][0] + dp[i-1][1] + dp[i-1][2])