[DP] Silver
dynamic programming
Last updated
dynamic programming
Last updated
μ μ xμ λν΄ μΈ κ°μ§ μ°μ°μ ν μ μλ€. μ°μ°μ λ°λ³΅νλ©° xλ₯Ό 1λ‘ λ§λ€κ³ μ ν λ, μ΅μνμ μ°μ° νμλ₯Ό ꡬν΄λΌ.
3μΌλ‘ λλμ΄ λ¨μ΄μ§λ€λ©΄, 3μΌλ‘ λλλ€.
2λ‘ λλμ΄ λ¨μ΄μ§λ€λ©΄, 2λ‘ λλλ€
1μ λΊλ€.
μ νμμ λ€μκ³Ό κ°λ€.
ν΄λΉ μ νμμ μ¬μ©νμ¬ Bottom up λ°©μμΌλ‘ μ½λλ₯Ό ꡬννλ€.
그리λλ μ μ λ κΉ?
무쑰건 λλμ μ΄ μ«μκ° λ 빨리 μ€μ΄λ€κΈ° λλ¬Έμ 그리λλ₯Ό μκ°ν μ μμ§λ§, μ΅μ νκ° μλλ€.
그리λ μκ³ λ¦¬μ¦μ 3μΌλ‘ λλ -> 2λ‘ λλ -> 1λ‘ λΊμ μμλ‘ μ΄λ£¨μ΄ μ§ κ²μ΄λ€.
2n + 1μ μκ°ν΄λ³΄μ.
Greedy: 11 -> 10 -> 5 -> 4 -> 2 -> 1 (6ν)
μ΅μ ν΄ : 11 -> 10 -> 9 -> 3 -> 1 (5ν)
κ°λ¨ν μμ λ‘λ 그리λκ° μ΅μ ν΄κ° μλμ λ°ν μ μλ€.
μκ·Όμ΄λ μ νν Nkgμ μ€νμ λ°°λ¬ν΄μΌνλ€. μ€νμ 3kg, 5kgμ λ΄μ§μ λ΄κ²¨μλ€. μ΄λ μκ·Όμ΄κ° Nkgμ μ€νμ μ΅μνμ λ΄μ§λ‘ λ°°λ¬νλ €κ³ νλ€. μ΄λ μ΅μ λ΄μ§ μλ₯Ό κ³μ°ν΄λΌ. (μ νν NkgμΌλ‘ λ°°λ¬ν μ μμ λμλ -1λ₯Ό μΆλ ₯νλ€.)
μ€ν DP λ°°μ΄μ μ μΈνλ€.
그리λλ‘ μ λλ μ΄μ ?
μ²μμλ 그리λλ‘ μΆ©λΆν μ κ·Ό κ°λ₯νλ€κ³ μκ°νλ€.
κ±°μ€λ¦λ λ¬Έμ μ²λΌ, 5ν€λ‘ κ·Έλ¨ λ΄μ§λ‘ λλκ³ , λλ¨Έμ§λ₯Ό 3ν€λ‘ λ΄μ§μ λ΄μΌλ©΄ λμ§ μλ? λΌκ³ μκ°νμ§λ§ μλλ€!
그리λ μ κ·Ό λ°©μμ λ°λ₯΄λ©΄, κ°λ₯ν λ§νΌ 5kgλ‘ κ°μ Έκ°κ³ , λλ¨Έμ§λ₯Ό 3kgμ λ΄μμΌνλ€.
νμ§λ§ 5λ 3μ λ°°μκ° μλλ€. μ΄μ 5λ₯Ό μ¬μ©νμ§ μμΌλ©΄ λ°°λ¬ν μ μμ§λ§, 그리λ μ κ·Ό λ°©λ²μΌλ‘ μΈν΄ -1μ΄ μΆλ ₯λλ κ²½μ°κ° μκΈ΄λ€.
μμ 1) μ€ν 21kg
Greedy : 5kg 4κ°, λ¨μ μ€ν 1kg -> λ°°λ¬ λΆκ°, -1 μΆλ ₯
μ€μ μ λ΅ : 3kg 7κ° -> λ°°λ¬ κ°λ₯, 7 μΆλ ₯
μμ 2) μ€ν 11kg
Greedy: 5kg 1κ°, λ¨μ μ€ν 1kg -> λ°°λ¬ λΆκ°, -1 μΆλ ₯
μ€μ μ λ΅: 5kg 1κ°, 3kg 2κ° -> λ°°λ¬ κ°λ₯, 3 μΆλ ₯
λ°λΌμ μ΄ λ¬Έμ λ 그리λλ‘ ν μ μλ€.
μ νμ μΈμ°λ λ°©λ²
μ€ν 11kgμΌλ‘ μκ°νλ©΄ μ΄λ κ² μκ°ν μ μλ€.
μ€ν 6kg + 5kg = 11kg
μ€ν 8kg + 3kg = 11kg
μ€ν 8kgμ λ§λ€ μ μλμ§ μ°μ κ³ λ €νμ§ μκ³ , 11kgλ₯Ό λ§λ€ μ μλ κ²½μ°μ μλ₯Ό μκ°νλ©΄ λλ€. (3kgλ‘ λ§λ€μ§ 5kgμΌλ‘ λ§λ€μ§)
κ·Έλ¦¬κ³ μ€ν 6kgμΌλ‘ λ§λλκ² λ λΉ λ₯Έμ§, 8kgμ λ§λλκ² λ λΉ λ₯Έμ§ λΉκ΅νλ κ²μ΄λ€. μ΄ν μ€ν λ΄μ§ 5kg λλ 3kgμ λνλ©΄ λλ€. (+1μ΄ λ€μ΄κ°λ μ΄μ )
F(11) = μ΅μ(μ€ν 8kg κ²½μ°μ μ, μ€ν 6kg κ²½μ°μ μ) + 1
μ¬κΈ°μ μ£Όμν μ μ F(x)κ° -1μΈ κ²½μ°λ μ ν¨νμ§ μμ κ°μμ μΈμ§νκ³ μμ΄μΌνλ€.
μ μ nμ΄ μ£Όμ΄μ‘μ λ, 1, 2, 3μ ν©μΌλ‘ λνλΌ μ μλ κ²½μ°μ μλ₯Ό κ³μ°ν΄λΌ.
n = 3μ΄λΌλ©΄ (1+1+1, 1+2, 2+1, 3) 4κ°μ§λ‘ ννν μ μλ€.
μ¬μ€ κ·μΉμ μκ°νκΈ° μ μ μ νμμ΄ λ μ¬λλ€. (μ»μ΄ κ±Έλ Έλ€λ λ§)
μ΄κ² μ λ§μ§? λΌλ μκ°μ νλλ° F(1)μ 1μ΄ μλ―Ένλ λ°κ° μ΅λκ°μ΄ 1μ΄λΌκ³ μκ°νλ©΄ μ½κ² μ΄ν΄ν μ μλ€.
F(4) = F(3) + F(2) + F(1) μ΄λ€.
F(1)μμ 3μ λνλ©΄ 4, F(2)μμ 2λ₯Ό λνλ©΄ 4, F(3)μμ 1μ λνλ©΄ 4κ° λλ€.
λ§μ°¬κ°μ§λ‘ F(7) = F(6) + F(5) + F(4)
F(6)μμ 1μ λνλ©΄ 7, F(5)μμ 2λ₯Ό λνλ©΄, F(4)μμ 3μ λνλ©΄ 7μ΄ λλ€.
κ²½μ°μ μμ μ°μ°μ ν·κ°λ¦¬μ§ λ§μ!!
μμ΄ Aκ° μ£Όμ΄μ‘μ λ, κ°μ₯ κΈ΄ μ¦κ°νλ λΆλΆ μμ΄μ ꡬνλ νλ‘κ·Έλ¨μ μμ±ν΄λΌ.
μμ΄μ μ λ ₯λ°λλ€.
λλ³΄λ€ μμ μ μ€ λΆλΆ μμ΄μ΄ κ°μ₯ κΈ΄ κ°μ μ°Ύμ μ μ₯νλ€.
resultμ μ΅λκ°μ μΆλ ₯νλ€.
μ°μ κ°μ₯ κΈ΄ μ¦κ°νλ λΆλΆμμ΄μ΄λΌλ λ§ λΆν° μ΄ν΄λ₯Ό ν΄ λ³΄μ.
λΆλΆ μμ΄ = "μ£Όμ΄μ§ μμ΄μ μΌλΆ νμ μλ μμλλ‘ λμ΄νμ¬ μ»μ μ μλ μμ΄"
μ¦κ°νλ μμ΄ = "μ€λ¦μ°¨μμΌλ‘ μ¦κ°νλ μμ΄"
κ°μ₯ κΈ΄ μ¦κ°νλ λΆλΆ μμ΄ = μ€λ¦μ°¨μμΌλ‘ μ λ ¬λλ λΆλΆμμ΄ μ€ lengthκ° κ°μ₯ κΈ΄ μμ΄
-> [10, 20, 10, 30, 20, 50]μμ κ°μ₯ κΈ΄ μ¦κ°νλ λΆλΆ μμ΄ = [10, 20, 30, 50]μ΄ λλ κ²μ΄λ€.
λ¬Έμ λ₯Ό μ΄ν΄νμΌλ, λ¬Έμ λ₯Ό νΈλ λ°©λ²μ κ³°κ³°ν μκ°ν΄λ³΄μ!
μ°μ , μμ xμ λν΄ μ΅μ λΆλΆ μμ΄μ κΈΈμ΄λ λκΉ? -> 1μ΄λ€! (xλ‘λ§ μ΄λ£¨μ΄μ§ λΆλΆ μμ΄μ΄ μκΈ° λλ¬Έ)
κ·ΈλΌ xλ₯Ό ν¬ν¨νλ λΆλΆ μμ΄μ ꡬνλ λ°©λ²μ λκΉ?
μκΈ° μμ λ³΄λ€ μμ μ μ€ result[n]μ΄ κ°μ₯ ν° κ² + 1 μ΄ λλ€.
μ¦, max( result[1...x-1] + 1, λ¨ xλ³΄λ€ μμ κ²½μ°)
λ무 μΆμμ μ΄λ [10, 20, 10, 30, 20, 50]μΌλ‘ λ€μ μκ°ν΄λ³΄μ.
result λ°°μ΄μλ [1, 1, 1, 1, 1, 1] μ΄ μ μ₯ λΌ μλ€.
(10μ λΉκ΅ν κ² μμΌλ λμ΄κ°λ€.) 20μ 10λ³΄λ€ ν¬λ€. λ°λΌμ 10μ resultμμ 1μ λν κ°μ κ°λλ€.
λ€μ 3λ²μ§Έ μμ 10μ 보λ, 10λ³΄λ€ μμ κ°μ΄ μ ν μμΌλ―λ‘ κ·Έλλ‘ result λ 1μ΄λ€.
λ€μ 4λ²μ§Έ μμ 30μ 보μ. [10, 20, 10]μ λͺ¨λ 30λ³΄λ€ μλ€. μ΄ μ€ resultκ° κ°μ₯ ν° κ²μ 20μ΄λ€. λ°λΌμ 30μ λν result κ°μ 2 + 1 = 3μ΄ λλ€. (2: 20μ ν¬ν¨νμ λ λΆλΆ μμ΄, 1μ 30μ΄ ν¬ν¨λλ μ«μ)
λ€μ 20μ 보μ. μκΈ°λ³΄λ€ μμ [10, 10] μ λν΄ λΆλΆμμ΄μ λ§λ€ μ μκ³ , 1+1 = 2κ° λλ€.
λ§μ§λ§ 50μ 보μ. μκΈ°λ³΄λ€ μμ λͺ¨λ κ°μ λν΄ μ‘°ννκ³ , κ°μ₯ ν° 3 + 1 = 4κ° λλ€.
μ νμ μ λ§μ‘±νλ F(n)μ κ³μ°νμ¬ μΆλ ₯νλ€.
κ·Έλμ μ΄ μ νμμ΄ λμ€λ κ²μ΄λ€.
μ νμ