λ¬Έμ μ€λͺ
κ³λ¨ μ€λ₯΄κΈ° κ²μμ κ³λ¨ μλ μμμ λΆν° κ³λ¨ κΌλκΈ°μ μμΉν λμ°©μ κΉμ§ κ°λ κ²μμ΄λ€. <κ·Έλ¦Ό 1>κ³Ό κ°μ΄ κ°κ°μ κ³λ¨μλ μΌμ ν μ μκ° μ°μ¬ μλλ° κ³λ¨μ λ°μΌλ©΄ κ·Έ κ³λ¨μ μ°μ¬ μλ μ μλ₯Ό μ»κ² λλ€.
<κ·Έλ¦Ό 1>
μλ₯Ό λ€μ΄ <κ·Έλ¦Ό 2>μ κ°μ΄ μμμ μμλΆν° 첫 λ²μ§Έ, λ λ²μ§Έ, λ€ λ²μ§Έ, μ¬μ― λ²μ§Έ κ³λ¨μ λ°μ λμ°©μ μ λλ¬νλ©΄ μ΄ μ μλ 10 + 20 + 25 + 20 = 75μ μ΄ λλ€.
<κ·Έλ¦Ό 2>
κ³λ¨ μ€λ₯΄λ λ°λ λ€μκ³Ό κ°μ κ·μΉμ΄ μλ€.
- κ³λ¨μ ν λ²μ ν κ³λ¨μ© λλ λ κ³λ¨μ© μ€λ₯Ό μ μλ€.
μ¦, ν κ³λ¨μ λ°μΌλ©΄μ μ΄μ΄μ λ€μ κ³λ¨μ΄λ, λ€μ λ€μ κ³λ¨μΌλ‘ μ€λ₯Ό μ μλ€. - μ°μλ μΈ κ°μ κ³λ¨μ λͺ¨λ λ°μμλ μ λλ€. λ¨, μμμ μ κ³λ¨μ ν¬ν¨λμ§ μλλ€.
- λ§μ§λ§ λμ°© κ³λ¨μ λ°λμ λ°μμΌ νλ€.
λ°λΌμ 첫 λ²μ§Έ κ³λ¨μ λ°κ³ μ΄μ΄ λ λ²μ§Έ κ³λ¨μ΄λ, μΈ λ²μ§Έ κ³λ¨μΌλ‘ μ€λ₯Ό μ μλ€. νμ§λ§, 첫 λ²μ§Έ κ³λ¨μ λ°κ³ μ΄μ΄ λ€ λ²μ§Έ κ³λ¨μΌλ‘ μ¬λΌκ°κ±°λ, 첫 λ²μ§Έ, λ λ²μ§Έ, μΈ λ²μ§Έ κ³λ¨μ μ°μν΄μ λͺ¨λ λ°μ μλ μλ€.
κ° κ³λ¨μ μ°μ¬ μλ μ μκ° μ£Όμ΄μ§ λ μ΄ κ²μμμ μ»μ μ μλ μ΄ μ μμ μ΅λκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
μ λ ₯μ 첫째 μ€μ κ³λ¨μ κ°μκ° μ£Όμ΄μ§λ€.
λμ§Έ μ€λΆν° ν μ€μ νλμ© μ μΌ μλμ λμΈ κ³λ¨λΆν° μμλλ‘ κ° κ³λ¨μ μ°μ¬ μλ μ μκ° μ£Όμ΄μ§λ€. κ³λ¨μ κ°μλ 300μ΄νμ μμ°μμ΄κ³ , κ³λ¨μ μ°μ¬ μλ μ μλ 10,000μ΄νμ μμ°μμ΄λ€.
μΆλ ₯
첫째 μ€μ κ³λ¨ μ€λ₯΄κΈ° κ²μμμ μ»μ μ μλ μ΄ μ μμ μ΅λκ°μ μΆλ ₯νλ€.
μ μΆλ ₯ μμ
μ λ ₯
6
10
20
15
25
10
20
μΆλ ₯
75
λ΄ λ¬Έμ νμ΄
let n = Int(readLine()!)!
var arr1 = Array(repeating: 0, count: n) // μ§μ κ³λ¨ λ°μ κ²½μ° λ°°μ΄
var arr2 = Array(repeating: 0, count: n) // μ§μ κ³λ¨ λ°μ§ μμ κ²½μ° λ°°μ΄
for i in 0..<n {
let now = Int(readLine()!)!
// μ§μ κ³λ¨μ λ°μλ€κ³ ν λ
if i == 0 { arr1[i] = now }
else { arr1[i] = now + arr2[i-1] }
// μ§μ κ³λ¨μ λ°μ§ μμλ€κ³ ν λ
if i < 2 { arr2[i] = now }
else { arr2[i] = now + max(arr1[i-2], arr2[i-2]) }
}
print(max(arr1[n-1], arr2[n-1]))
π DP λ¬Έμ λ‘, μ§μ κ³λ¨μ λ°μμ κ²½μ°μ λ°μ§ μμμ κ²½μ°λ‘ λλ μ λ©λͺ¨μ΄μ μ΄μ ν΄μ£Όλκ² ν¬μΈνΈ!
[λ³μ μ€λͺ ]
- n : μ λ ₯λ°μ κ³λ¨ μ
- arr1 : μ§μ κ³λ¨μ λ°μ κ²½μ°μ μ°μ° κ°μ μ μ₯ν λ°°μ΄
- arr2 : μ§μ κ³λ¨μ λ°μ§ μμ κ²½μ°μ μ°μ° κ°μ μ μ₯ν λ°°μ΄
[νμ΄ μ€λͺ ]
- μ§μ κ³λ¨μ λ°μλ€κ³ μΉλ€λ©΄, μ μ κ³λ¨μ λ°μ§ μμλ€λ κ²μΌλ‘ ν΄μν μ μλ€.
=> arr2 λ°°μ΄μ μ§μ μμΉ λμ κ°μ, νμ¬ κ³λ¨μ κ°μ λν΄μ μ μ₯ν΄μ£Όλ©΄ λλ€.
(arr1 λ°°μ΄μ μ§μ μμΉ κ°μ μ μ₯νλ©΄ μλλ€.
κ·Έ μ΄μ λ, arr1μ μ§μ κ³λ¨μ λ°μμ λλ₯Ό μ μ₯νλ λ°°μ΄μ΄λ―λ‘
arr1 λ°°μ΄μ μ§μ μμΉ κ°μ λ κ·Έ λ°λ‘ μ§μ κ³λ¨μ λ°μλ€λ μλ―Έμ΄κΈ° λλ¬Έμ΄λ€.
λ¬Έμ μμ 3μ°μ κ³λ¨ λ°κΈ°λ μλλ€κ³ νμΌλ―λ‘ arr2 λ°°μ΄μ μ§μ μμΉ κ°μ μ¬μ©ν΄μΌνλ€.) - μ§μ κ³λ¨μ λ°μ§ μμλ€κ³ μΉλ€λ©΄, μ μ κ³λ¨μ λ°κ³ μ¨ μ¬λΌμλ€λ κ²μΌλ‘ ν΄μν μ μλ€.
=> arr1κ³Ό arr2μ μ μ μμΉ λμ κ° μ€ λ ν°μλ₯Ό κ³¨λΌ λν΄μ μ μ₯ν΄μ£Όλ©΄ λλ€.
[μ½λ μ€λͺ ]
- λ°λ³΅λ¬ΈμΌλ‘ 첫 λ²μ§Έ κ³λ¨λΆν° λ°μμ€λ©΄μ λ°λ‘λ°λ‘ μ°μ°ν΄μ£Όμλ€.
- arr1 λ¨Όμ κ°μ ν λΉν΄λ³΄μ.
arr1μ μ§μ κ³λ¨μ λ°μλ€κ³ νλ κ²½μ°μΈλ°, 첫 λ²μ§Έ κ³λ¨μΌ κ²½μ°μλ μ§μ κ³λ¨μ΄ μμΌλ―λ‘
i == 0 μΌ λλ arr1 λ°°μ΄ ν΄λΉ μμΉμ νμ¬ κ³λ¨ μ μλ₯Ό κ·Έλλ‘ μ μ₯νλ€.
κ·Έ μΈμ κ²½μ°μλ arr1μ i μμΉμ (νμ¬ κ³λ¨ μ μ + arr2μ μ§μ λμ κ°)μ μ μ₯νλ€. - arr2 κ°μ ν λΉν΄λ³΄μ.
arr2λ μ μ κ³λ¨μ λ°μλ€κ³ νλ κ²½μ°μΈλ°, 첫 λ²μ§Έμ λ λ²μ§Έ κ³λ¨μΌ κ²½μ°μ λΆκ°νλ€.
λ°λΌμ i < 2 μΌ λλ arr2 λ°°μ΄ ν΄λΉ μμΉμ νμ¬ κ³λ¨ μ μλ₯Ό κ·Έλλ‘ μ μ₯νλ€.
κ·Έ μΈμ κ²½μ°μλ arr1κ³Ό arr2μ μ μ μμΉ λμ κ° μ€ λ ν° μλ₯Ό κ³¨λΌ νμ¬ κ³λ¨κ°μ λνλ€.
π‘ νΌλλ°±
- μ²μμ μ¬κ·λ‘ λͺ¨λ κ²½μ°μ μλ₯Ό νμΈν΄μ£Όμλλ°, μκ°μ΄κ³Όκ° λ¬λ€.
- μ΄ λ¬Έμ κ°μ΄ λ± λͺ κ°μ§μ μΌμ΄μ€λ‘ λ΅μ ꡬνλκ² κ°λ₯ν κ²½μ°μλ
무쑰건 DPλ‘ νμ΄ν΄μΌ ν¨μ¨μ±μ λμΌ μ μλ κ² κ°λ€. - λ¬Έμ λ₯Ό μ΄ν΄νκ³ , μ΄λ ν μΌμ΄μ€λ‘ λλ μ μλμ§ μ νν νμ ν μ μμ΄μΌ ν κ² κ°λ€.
λ¬Έμ
'3οΈβ£ Swift > Problem Solving' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift Algorithm] 2Γn νμΌλ§ BOJ #11726 (0) | 2021.10.20 |
---|---|
[Swift Algorithm] RGB거리 BOJ #1149 (0) | 2021.10.20 |
[Swift Algorithm] 1, 2, 3 λνκΈ° BOJ #9095 (0) | 2021.10.19 |
[Swift Algorithm] 1λ‘ λ§λ€κΈ°BOJ #1463 (0) | 2021.10.19 |
[Swift Algorithm] μμ μμ BOJ #2468 (2) | 2021.10.12 |
λκΈ