🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] λ„λ‘‘μ§ˆ (level4, python)

개발자 HOON 2022. 10. 14. 14:19

🏝 문제 μ„€λͺ…

 

도둑이 μ–΄λŠ λ§ˆμ„μ„ ν„Έ κ³„νšμ„ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 λ§ˆμ„μ˜ λͺ¨λ“  집듀은 μ•„λž˜ κ·Έλ¦Όκ³Ό 같이 λ™κ·Έλž—κ²Œ λ°°μΉ˜λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

 

 

각 집듀은 μ„œλ‘œ μΈμ ‘ν•œ 집듀과 λ°©λ²”μž₯μΉ˜κ°€ μ—°κ²°λ˜μ–΄ 있기 λ•Œλ¬Έμ— μΈμ ‘ν•œ 두 집을 ν„Έλ©΄ 경보가 μšΈλ¦½λ‹ˆλ‹€.

각 집에 μžˆλŠ” 돈이 λ‹΄κΈ΄ λ°°μ—΄ moneyκ°€ μ£Όμ–΄μ§ˆ λ•Œ, 도둑이 ν›”μΉ  수 μžˆλŠ” 돈의 μ΅œλŒ“κ°’μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•˜μ„Έμš”.


μ œν•œμ‚¬ν•­
  • 이 λ§ˆμ„μ— μžˆλŠ” 집은 3개 이상 1,000,000개 μ΄ν•˜μž…λ‹ˆλ‹€.
  • money λ°°μ—΄μ˜ 각 μ›μ†ŒλŠ” 0 이상 1,000 μ΄ν•˜μΈ μ •μˆ˜μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예
[1, 2, 3, 1] 4

🏝 풀이 μ½”λ“œ

def solution(money):
    answer = 0
    if len(money) == 1:
        return money.pop()

    size = len(money)
    # 1번 μ„ νƒν•˜λŠ” 경우 -> 1..n-1번 배열에 λŒ€ν•œ DP
    dp1 = [0] + money[:-1]
    for i in range(2, size):
        dp1[i] = max(dp1[i-1], dp1[i-2] + dp1[i])
    
    # 2번 μ„ νƒν•˜λŠ” 경우 -> 2...n번 배열에 λŒ€ν•œ DP
    dp2 = [0] + money[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에 λŒ€ν•œ λ¬Έμ œμ΄λ‹€.

2022.10.14 - [🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS] - [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] μŠ€ν‹°μ»€ λͺ¨μœΌκΈ°(2) (level3, python)

 

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] μŠ€ν‹°μ»€ λͺ¨μœΌκΈ°(2) (level3, python)

🏝 문제 μ„€λͺ… N개의 μŠ€ν‹°μ»€κ°€ μ›ν˜•μœΌλ‘œ μ—°κ²°λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ 그림은 N = 8인 경우의 μ˜ˆμ‹œμž…λ‹ˆλ‹€. μ›ν˜•μœΌλ‘œ μ—°κ²°λœ μŠ€ν‹°μ»€μ—μ„œ λͺ‡ μž₯의 μŠ€ν‹°μ»€λ₯Ό λœ―μ–΄λ‚΄μ–΄ λœ―μ–΄λ‚Έ μŠ€ν‹°μ»€μ— 적힌 숫자의 합이

hoons-dev.tistory.com

 

μœ„ λ¬Έμ œμ™€ μ™„μ „νžˆ λ™μΌν•œ 문제이며, μ½”λ“œλ§ˆμ € λ™μΌν•˜λ‹€.

Level의 차이가 λ‚˜λŠ” μ΄μœ λŠ” λ„λ‘‘μ§ˆ λ¬Έμ œκ°€ νš¨μœ¨μ„± 체크λ₯Ό 더 κ°•ν•˜κ²Œ ν•˜κΈ° λ•Œλ¬ΈμœΌλ‘œ λ³΄μ΄λŠ”λ°, λ‘˜ λ‹€ μ›ν˜• DP ν’€μ΄λ‘œ ν’€λ¦°λ‹€.

 

이 문제의 해섀에 λŒ€ν•΄ μ•Œκ³  μ‹Άλ‹€λ©΄, μœ„ 링크의 ν•΄μ„€ 글에 λ‚˜μ™€μžˆμœΌλ‹ˆ μ°Έκ³  λ°”λž€λ‹€.