[python] νλ‘κ·Έλλ¨Έμ€ - λλμ§
π€λ¬Έμ ν΄κ²°
Lv4 | DP
"μΈμ ν μ§μ νΈ μ μλ€" κΉμ§λ ν¬κ² μ΄λ €μ΄ λ¬Έμ κ° μλμ§λ§
"λ§μμ΄ μνμΌλ‘ λμ΄ μλ€" μμ νλ² λ μκ°νκ² νλ λ¬Έμ !!
-> 0λ²μ§Έ μ§μ ν°λ κ²½μ°( λ§μ§λ§ μ§μ νΈμ§ λͺ»νλ€ )μ 0λ²μ§Έ μ§μ μν°λ κ²½μ° λκ°μ§λ‘ λλ μ μλ€.
λ¨Όμ 0λ²μ§μ νΈ κ²½μ°!
- 0λ²μ§μ λ€λ μ λ κ°μ₯ λ§μ λμ κ°μ Έμ€λ κ²½μ°λ 0λ²μ§μ ν΄λ€. dp[0] = money[0]
- 1λ²μ§μ λ€λ μ λ κ°μ₯ λ§μ λμ κ°μ Έμ€λ κ²½μ°λ 1λ²μ§μ ν°λ κ²½μ°μ§λ§ μ°λ¦¬λ 1λ²μ§μ λ°λμ νΈμλ€κ³ κ°μ νμΌλ―λ‘ μΈμ ν 2λ²μ§μ νΈ μ μλ€. dp[1] = 0
- 2λ²μ§μ λ€λ μ λ: μΈμ ν 1λ²μ§μ΄ μλ 0λ²μ§ λλ -1λ²μ§(2λ²μΌ λλ μλ€) μ€ λμ λ§μ΄ κ°μ Έμλ μ§μμ μ¨λ€.
dp[2] = money[i] + max(dp[i-2], dp[i-1]) - λ§μ§λ§μΌλ‘ nλ²μ§Έ μ§μ μλ€κ³ κ°μ ν΄μΌνλ€. (1λ²μ§μ νΈμμΌλ―λ‘ 1λ²κ³Ό μΈμ ν nλ²μ§μ νΈλ©΄ μλ¨!!)
λ€μ 0λ²μ§μ μν°λ κ²½μ°!
- 0λ²μ§μ νΈμ§ μμΌλ―λ‘ dp[0] = 0
- 0λ²μ§ μνΈμμΌλ 1λ²μ§μ νλ€. dp[1] = money[1]
π¨
π»μμ€ μ½λ
def solution(money):
answer = 0
n = len(money)
# 0λ²μ§ νΈκΈ°
dp1 = [0] * (n - 1)
dp1[0] = money[0]
dp1[1] = 0
for i in range(2, n - 1):
dp1[i] = money[i] + max(dp1[i - 2], dp1[i - 3])
# 0λ²μ§ μνΈκΈ°
dp2 = [0] * (n)
dp2[0] = 0
dp2[1] = money[1]
for i in range(2, n):
dp2[i] = money[i] + max(dp2[i - 2], dp2[i - 3])
answer = max(max(dp1), max(dp2))
return answer
πλ¬Έμ νμΈ
μΆμ²: νλ‘κ·Έλλ¨Έμ€
λ§ν¬: https://programmers.co.kr/learn/courses/30/lessons/42897
μ½λ©ν μ€νΈ μ°μ΅ - λλμ§
λλμ΄ μ΄λ λ§μμ νΈ κ³νμ νκ³ μμ΅λλ€. μ΄ λ§μμ λͺ¨λ μ§λ€μ μλ κ·Έλ¦Όκ³Ό κ°μ΄ λκ·Έλκ² λ°°μΉλμ΄ μμ΅λλ€. κ° μ§λ€μ μλ‘ μΈμ ν μ§λ€κ³Ό λ°©λ²μ₯μΉκ° μ°κ²°λμ΄ μκΈ° λλ¬Έμ μΈμ ν οΏ½οΏ½
programmers.co.kr
λ¬Έμ μ€λͺ
λλμ΄ μ΄λ λ§μμ νΈ κ³νμ νκ³ μμ΅λλ€. μ΄ λ§μμ λͺ¨λ μ§λ€μ μλ κ·Έλ¦Όκ³Ό κ°μ΄ λκ·Έλκ² λ°°μΉλμ΄ μμ΅λλ€.
κ° μ§λ€μ μλ‘ μΈμ ν μ§λ€κ³Ό λ°©λ²μ₯μΉκ° μ°κ²°λμ΄ μκΈ° λλ¬Έμ μΈμ ν λ μ§μ νΈλ©΄ κ²½λ³΄κ° μΈλ¦½λλ€.
κ° μ§μ μλ λμ΄ λ΄κΈ΄ λ°°μ΄ moneyκ° μ£Όμ΄μ§ λ, λλμ΄ νμΉ μ μλ λμ μ΅λκ°μ return νλλ‘ solution ν¨μλ₯Ό μμ±νμΈμ.
μ νμ¬ν
- μ΄ λ§μμ μλ μ§μ 3κ° μ΄μ 1,000,000κ° μ΄νμ λλ€.
- money λ°°μ΄μ κ° μμλ 0 μ΄μ 1,000 μ΄νμΈ μ μμ λλ€.
μ μΆλ ₯ μ
money | return |
[1, 2, 3, 1] | 4 |