π λ¬Έμ μ€λͺ
Nκ°μ μ€ν°μ»€κ° μνμΌλ‘ μ°κ²°λμ΄ μμ΅λλ€. λ€μ κ·Έλ¦Όμ N = 8μΈ κ²½μ°μ μμμ λλ€.
μνμΌλ‘ μ°κ²°λ μ€ν°μ»€μμ λͺ μ₯μ μ€ν°μ»€λ₯Ό λ―μ΄λ΄μ΄ λ―μ΄λΈ μ€ν°μ»€μ μ ν μ«μμ ν©μ΄ μ΅λκ° λλλ‘ νκ³ μΆμ΅λλ€. λ¨ μ€ν°μ»€ ν μ₯μ λ―μ΄λ΄λ©΄ μμͺ½μΌλ‘ μΈμ ν΄μλ μ€ν°μ»€λ μ°’μ΄μ Έμ μ¬μ©ν μ μκ² λ©λλ€.
μλ₯Ό λ€μ΄ μ κ·Έλ¦Όμμ 14κ° μ ν μ€ν°μ»€λ₯Ό λ―μΌλ©΄ μΈμ ν΄μλ 10, 6μ΄ μ ν μ€ν°μ»€λ μ¬μ©ν μ μμ΅λλ€. μ€ν°μ»€μ μ ν μ«μκ° λ°°μ΄ ννλ‘ μ£Όμ΄μ§ λ, μ€ν°μ»€λ₯Ό λ―μ΄λ΄μ΄ μ»μ μ μλ μ«μμ ν©μ μ΅λκ°μ return νλ solution ν¨μλ₯Ό μμ±ν΄ μ£ΌμΈμ. μνμ μ€ν°μ»€ λͺ¨μμ μν΄ λ°°μ΄μ 첫 λ²μ§Έ μμμ λ§μ§λ§ μμκ° μλ‘ μ°κ²°λμ΄ μλ€κ³ κ°μ£Όν©λλ€.
μ ν μ¬ν
- stickerλ μνμΌλ‘ μ°κ²°λ μ€ν°μ»€μ κ° μΉΈμ μ ν μ«μκ° μμλλ‘ λ€μ΄μλ λ°°μ΄λ‘, κΈΈμ΄(N)λ 1 μ΄μ 100,000 μ΄νμ λλ€.
- stickerμ κ° μμλ μ€ν°μ»€μ κ° μΉΈμ μ ν μ«μμ΄λ©°, κ° μΉΈμ μ ν μ«μλ 1 μ΄μ 100 μ΄νμ μμ°μμ λλ€.
- μνμ μ€ν°μ»€ λͺ¨μμ μν΄ sticker λ°°μ΄μ 첫 λ²μ§Έ μμμ λ§μ§λ§ μμκ° μλ‘ μ°κ²°λμ΄μλ€κ³ κ°μ£Όν©λλ€.
μ μΆλ ₯ μ
[14, 6, 5, 11, 3, 9, 2, 10] | 36 |
[1, 3, 2, 5, 4] | 8 |
μ μΆλ ₯ μ μ€λͺ
μ
μΆλ ₯ μ #1
6, 11, 9, 10μ΄ μ ν μ€ν°μ»€λ₯Ό λΌμ΄ λμ λ 36μΌλ‘ μ΅λκ° λ©λλ€.
μ
μΆλ ₯ μ #2
3, 5κ° μ ν μ€ν°μ»€λ₯Ό λΌμ΄ λμ λ 8λ‘ μ΅λκ° λ©λλ€.
π νμ΄ μ½λ
def solution(sticker):
answer = 0
if len(sticker) == 1:
return sticker.pop()
size = len(sticker)
# 1λ² μ ννλ κ²½μ° -> 1..n-1λ² λ°°μ΄μ λν DP
dp1 = [0] + sticker[:-1]
for i in range(2, size):
dp1[i] = max(dp1[i-1], dp1[i-2] + dp1[i])
# 2λ² μ ννλ κ²½μ° -> 2...nλ² λ°°μ΄μ λν DP
dp2 = [0] + sticker[1:]
for i in range(2, size):
dp2[i] = max(dp2[i-1], dp2[i-2] + dp2[i])
answer = max(dp1[-1], dp2[-1])
return answer
μν DPμ λν λ¬Έμ μ΄λ€.
μ°μ , μνμ΄λΌλ νΉμ§μ μ κ±°νκ³ λ¬Έμ λ₯Ό λ°λΌλ³΄μ.
μ£Όμ΄μ§ [14, 6, 5, 11, 3, 9, 2, 10] λ°°μ΄μ κ°μ§κ³ μ΄λ»κ² μ νμ ν΄μΌ μ’μ μ§ μκ°ν΄λ³΄μ.
μ΄ λ°°μ΄μ DP λ°°μ΄λ‘ λ§λ€κ³ , κ° μ리λ§λ€ ν΄λΉ μμΉκΉμ§μ μ΅μ μ ν΄λ₯Ό μ μ₯ν΄λ³΄μ.
[14]λ§ μ£Όμ΄μ§ λ°°μ΄μ΄λΌλ©΄, 14λ₯Ό μ ννλ κ²μ΄ μ΅μ μ΄λ€.
[14, 6]μ΄ μ£Όμ΄μ§ λ°°μ΄μΈ κ²½μ°, μλ‘ λ€μ΄μ¨ 6μ μ ννλ©΄ 14λ₯Ό μ ννμ§ λͺ»νλ€. 14κ° λ ν¬λ―λ‘ 14λ₯Ό μ ννλ κ²μ΄ μ΅μ μ΄λ€, λ°λΌμ DPλ°°μ΄μ [14, 6] → [14, 14]λ‘ λ³ννλ€.
κΈ°μ‘΄ λ°°μ΄ [14, 6, 5]μ κ²½μ°λ₯Ό 보μ. μλ‘ λ€μ΄μ¨ 5λ₯Ό μ ννκ² λλ©΄, 6μ μ ννμ§ λͺ»νμ§λ§, μμ 14λ μ νμ΄ κ°λ₯νλ€. 5λ₯Ό μ ννμ§ μκ³ 6μ μ ννλ©΄ 14λ μ ννμ§ λͺ»νλ―λ‘, 19 > 6μ΄λ―λ‘ 19λ₯Ό μ ννλ κ²μ΄ μ΅μ μ΄λ€. λ°λΌμ DP λ°°μ΄μ [14, 14, 5] → [14, 14, 19]μ΄λ€.
μ‘°κΈλ§ λ 보μ.
κΈ°μ‘΄ λ°°μ΄ [14, 6, 5, 11]μ κ²½μ°, μλ‘ λ€μ΄μ¨ 11μ μ ννκ² λλ©΄ 5λ μ ννμ§ λͺ»νμ§λ§, 6μ΄λ 14λ₯Ό μ νν μ μλ€. μ¬κΈ°μ 6μ μ ννκ² λλ©΄ 14λ₯Ό μ ννμ§ λͺ»νλ, 11 + 14λ₯Ό νλ κ²μ΄ λ μ³λ€. 14 + 5μ μ‘°ν©λ³΄λ€ λ ν¬λ―λ‘, 25κ° μ νλλ κ²μ΄ μ³λ€. λ°λΌμ DP λ°°μ΄μ [14, 14, 19, 11] → [14, 14, 19, 25]κ° λλ€.
μ¬κΈ°μ μ½κ°μ μ νμμ μ΄λμ΄ λΌ μ μλ€.
κ° λ°°μ΄μ μ¬μ΄μ¦λ₯Ό νλμ© λλ €κ°λ©΄μ 'μλ‘ λ€μ΄μ¨ μ'λ₯Ό κΈ°μ€μΌλ‘ λ€μλ€.
κ·Έλ¦¬κ³ [14, 6, 5, 11]μμ 보μλ―μ΄, 11μ μ ννλ€κ³ ν΄μ λ°λ‘ 5λ₯Ό μ μΈν μμ κ°μΈ 6μ μ νν κ²μ΄ μλλΌ, 14λ₯Ό μ ννλ€.
κΈ°μ‘΄ λ°°μ΄μμλ μ νμμ μ°ΎκΈ° μ΄λ ΅μ§λ§, DP λ°°μ΄μμλ μ‘°κΈ λ³΄μΌ μ μλ€.
DPλ°°μ΄μμ DP[i] = max(DP[i] + DP[i-2], DP[i-1])μ΄λΌλ μμ μ΄λ μ μλλ°, μ΄λ₯Ό ν΄μνλ©΄ λ€μκ³Ό κ°λ€.
DP[i] = μ΅λκ°(μλ‘ λ€μ΄μ¨ μ + 2μΉΈ μ κΉμ§μ μ΅μ μ κ°, 1μΉΈ μ μ μ΅μ μ κ°)
νμ§λ§, μ¬κΈ°μ μνμ΄λΌλ μ‘°κ±΄μ΄ μλ€. 0λ² μΈλ±μ€μ μ€ν°μ»€λ₯Ό λΌλ©΄ -1λ² μΈλ±μ€μ μ€ν°μ»€λ μ¬μ©νμ§ λͺ»νλ κ²μ΄λ€.
λ°λΌμ λ κ°μ§μ κ²½μ°λ‘ λΆλ¦¬ν΄μ μκ°ν΄λ³΄μ.
1) 0λ² μΈλ±μ€μ μ€ν°μ»€λ₯Ό λΌλ κ²½μ°
2) 1λ² μΈλ±μ€μ μ€ν°μ»€λ₯Ό λΌλ κ²½μ°
1λ²μ, λ§μ§λ§ μΈλ±μ€μ μ€ν°μ»€λ 무쑰건 μ¬μ©νμ§ λͺ»νλ€. λ°λΌμ λ§μ§λ§ μμλ₯Ό μ κ±°ν [:-1] λ²μμ λν΄μ DPλ₯Ό ν λ² λλ¦°λ€.
2λ²μ, 0λ² μΈλ±μ€μ μ€ν°μ»€λ 무쑰건 μ¬μ©νμ§ λͺ»νλ€. λ°λΌμ κ°μ₯ μ μμλ₯Ό μ κ±°ν [1:] λ²μμ λν΄μ DPλ₯Ό ν λ² λλ¦°λ€.
κ° κ²½μ°μ μ΅λκ°λ€ μ€ μ΅λκ°μ΄ μ λ΅μ΄ λλ€.
λν μ νμ μμ²΄κ° i-2κΉμ§ λμ€κΈ° λλ¬Έμ μ£Όμ΄μ§ λ°°μ΄μ μΈλ±μ€ μλ¬κ° λμ§ μλλ‘ μ£Όμνμ¬μΌ νλ€.
μνν κ³μ°μ μν΄ [:-1]λ°°μ΄κ³Ό [1:] λ°°μ΄ λͺ¨λ μμ [0]μ μΆκ°ν΄μ£Όμλ€. μ νμμ΄ λ§μ μ°μ°μ΄λΌ κ²°κ³Όμ μν₯μ λ―ΈμΉμ§λ μκ³ κ΅¬νλ νΈλ¦¬νκ² λμμ£Όλ μ€ν¬μ΄μλ€.
- μν DPλ₯Ό νΈλ λ°©λ²
1. μν 쑰건μ μ κ±°ν μνμμ DPμ μ νμ μ΄λκΈ°
2. μν 쑰건μ 2κ°μ§ μΌμ΄μ€λ‘ λΆλ¦¬ν΄μ DP μ°μ°μ κ° μΌμ΄μ€λ§λ€ λλ¦¬κ³ κ²°κ³Ό λ°μ
2022.10.14 - [π μ½λ©ν μ€νΈ λλΉ : PS] - [νλ‘κ·Έλλ¨Έμ€] λλμ§ (level4, python)
μ λ¬Έμ μ μμ ν λμΌνλ©°, νμ΄μ½λ μμ λμΌνλ€. ν λ² λ μ°μ΅μ΄ νμνλ€λ©΄ μ΄ λ¬Έμ λ‘ λ³΅μ΅νλ κ²λ μ’λ€.
'π μ½λ©ν μ€νΈ λλΉ : PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€] μ°μ λΆλΆ μμ΄ ν©μ κ°μ (level2, python) (0) | 2022.10.14 |
---|---|
[νλ‘κ·Έλλ¨Έμ€] λλμ§ (level4, python) (0) | 2022.10.14 |
[νλ‘κ·Έλλ¨Έμ€] λ°°λ¬ (level2, python) (0) | 2022.10.13 |
[νλ‘κ·Έλλ¨Έμ€] μ¬ μ°κ²°νκΈ° (level3, python) (1) | 2022.10.13 |
[νλ‘κ·Έλλ¨Έμ€] μ€ μλ λ°©λ² (level2, python) (1) | 2022.10.13 |