๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Problem_Solving/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋„๋‘‘์งˆ (Python/ํŒŒ์ด์ฌ)

by ํฌ์ŠคํŠธ์‰์ดํฌ 2023. 2. 8.

<๋ฌธ์ œ ๋งํฌ>

https://school.programmers.co.kr/learn/courses/30/lessons/42897

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

<ํ’€์ด ์ „๋žต>

1.  ๋ฐฑ์ค€์˜ RGB ๊ฑฐ๋ฆฌ2(https://www.acmicpc.net/problem/17404)์™€ ์œ ์‚ฌํ•œ ๋ฌธ์ œ์ด๋‹ค.

2. ์ฒซ์ง‘ ๋„๋‘‘์งˆ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋งˆ์ง€๋ง‰ ์ง‘์˜ ๋„๋‘‘์งˆ ์—ฌ๋ถ€๊ฐ€ ๊ฒฐ์ •๋˜๋ฏ€๋กœ ์ฒซ ์ง‘์˜ ๋„๋‘‘์งˆ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‚˜๋ˆ ์„œ ์ ํ™”์‹์„ ์„ธ์šฐ๋ฉด ๋œ๋‹ค.

 

<์ •๋‹ต ์ฝ”๋“œ>

def solution(money):

    answer = 0

    N = len(money)
    
    # ์ฒซ ์ง‘์„ ํ„ธ๊ฑฐ๋‚˜ ์•ˆ ํ„ธ๊ฑฐ๋‚˜
    for i in range(2):
        
        # dp ํ…Œ์ด๋ธ” ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”
        dp = [0 for _ in range(N)]

        # i == 0 -> ์ฒซ์ง‘ 0, i == 1 -> ์ฒซ์ง‘ x
        dp[0] = money[i] if i == 0 else 0
        dp[1] = max(dp[0], money[1])

        # ์ ํ™”์‹: dp[j] = max(money[j] + dp[j - 2], dp[j - 1])
        # max(ํ˜„์žฌ์ง‘ + ์ด์ „์ด์ „์ง‘, ์ง์ „์ง‘) 
        for j in range(2, N - 1):
            dp[j] = max(money[j] + dp[j - 2], dp[j - 1])
        
        # ๋งˆ์ง€๋ง‰ ์ง‘
        if i == 0:
            dp[-1] = dp[-2]
        else:
            dp[-1] = max(money[-1] + dp[- 3], dp[- 2])

        
        answer = max(answer, dp[-1])

    return answer

 

๋Œ“๊ธ€