π©π»βπ»λ¬Έμ μ€λͺ
[μ΄μ½ν
Ch16-32] μ μ μΌκ°ν (DP)
βοΈIdea Sketch
λ¬Έμ μμ½
맨 μμΈ΅ 7λΆν° μμν΄μ μλμ μλ μ μ€ νλλ₯Ό μ ννμ¬ μλμΈ΅μΌλ‘ λ΄λ €μ¬ λ, μ΄μ κΉμ§ μ νλ μμ ν©μ΄ μ΅λκ° λλ κ²½λ‘λ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νλΌ. μλμΈ΅μ μλ μλ νμ¬ μΈ΅μμ μ νλ μμ λκ°μ μΌμͺ½ λλ λκ°μ μ€λ₯Έμͺ½μ μλ κ² μ€μμλ§ μ νν μ μλ€.
μκ°λ³΅μ‘λ
O(n)
μμμλΆν° μλκΉμ§ λͺ¨λ μλ₯Ό ν λ²μ© νμνλ―λ‘ O(n)μ΄λ€. μ¬κΈ°μ nμ μμ°¨νμμ μλ―Ένλ©°, λ¬Έμ μ μΌκ°νμ ν¬κΈ° nκ³Όλ λ€λ₯΄λ€.
μκ³ λ¦¬μ¦ : λ€μ΄λλ―Ή νλ‘κ·Έλλ°
βοΈλ΄ μμ€μ½λ
- μλμΈ΅μ μλ μλ νμ¬ μΈ΅μμ μ νλ μμ λκ°μ μΌμͺ½ λλ λκ°μ μ€λ₯Έμͺ½μ μλ κ² μ€μμλ§ μ νν μ μλ€. λ°λΌμ dp[i-1][j]μ dp[i-1][j-1] μ€ λ ν° κ°μ μ ννλ©΄ λλ€.
- μλμΈ΅μ μλ μλ νμ¬ μΈ΅μμ μ νλ μμ λκ°μ μΌμͺ½ λλ λκ°μ μ€λ₯Έμͺ½μ μλ κ² μ€μμλ§ μ νν μ μλ€. μ΄ λ κ°μ₯ μΌμͺ½μ μλ μλ λκ°μ μΌμͺ½μ μκ° μκ³ , κ°μ₯ μ€λ₯Έμͺ½μ μλ μλ λκ°μ μ€λ₯Έμͺ½μ μκ° μμ΄ IndexErrorκ° λ°μνλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ λ ₯κ° μμͺ½μ 0 λ°μ΄ν°λ₯Ό μΆκ°νμ¬ λ°°μ΄μ νμ₯ν΄μ€λ€.
- dp[i][0]μ κ²½μ° dp[i-1][0]λ νμν μ μμ§λ§ dp[i-1][-1]μ IndexErrorλ‘ νμν μ μλ€. κ·Έλ¦¬κ³ dp[i][n-1]λ dp[i-1][n-1]μ IndexErrorλ‘ νμν μ μμ§λ§ dp[i-1][n-2]λ νμν μ μλ€.
μ 체 μ½λ
import sys
si = sys.stdin.readline
n = int(si())
dp = []
for _ in range(n):
arr = [0] + list(map(int, si().split())) + [0]
dp.append(arr)
for i in range(1, n):
for j in range(1, i+2):
dp[i][j] += max(dp[i-1][j], dp[i-1][j-1])
print(max(dp[n-1]))