[python] ํ๋ก๊ทธ๋๋จธ์ค - ๋๋์ง
๐ค๋ฌธ์ ํด๊ฒฐ
Lv4 | DP
"์ธ์ ํ ์ง์ ํธ ์ ์๋ค" ๊น์ง๋ ํฌ๊ฒ ์ด๋ ค์ด ๋ฌธ์ ๊ฐ ์๋์ง๋ง
"๋ง์์ด ์ํ์ผ๋ก ๋์ด ์๋ค" ์์ ํ๋ฒ ๋ ์๊ฐํ๊ฒ ํ๋ ๋ฌธ์ !!
-> 0๋ฒ์งธ ์ง์ ํฐ๋ ๊ฒฝ์ฐ( ๋ง์ง๋ง ์ง์ ํธ์ง ๋ชปํ๋ค )์ 0๋ฒ์งธ ์ง์ ์ํฐ๋ ๊ฒฝ์ฐ ๋๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
๋จผ์ 0๋ฒ์ง์ ํธ ๊ฒฝ์ฐ!
- 0๋ฒ์ง์ ๋ค๋ ์ ๋ ๊ฐ์ฅ ๋ง์ ๋์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ๋ 0๋ฒ์ง์ ํด๋ค. dp[0] = money[0]
- 1๋ฒ์ง์ ๋ค๋ ์ ๋ ๊ฐ์ฅ ๋ง์ ๋์ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ๋ 1๋ฒ์ง์ ํฐ๋ ๊ฒฝ์ฐ์ง๋ง ์ฐ๋ฆฌ๋ 1๋ฒ์ง์ ๋ฐ๋์ ํธ์๋ค๊ณ ๊ฐ์ ํ์ผ๋ฏ๋ก ์ธ์ ํ 2๋ฒ์ง์ ํธ ์ ์๋ค. dp[1] = 0
- 2๋ฒ์ง์ ๋ค๋ ์ ๋: ์ธ์ ํ 1๋ฒ์ง์ด ์๋ 0๋ฒ์ง ๋๋ -1๋ฒ์ง(2๋ฒ์ผ ๋๋ ์๋ค) ์ค ๋์ ๋ง์ด ๊ฐ์ ธ์๋ ์ง์์ ์จ๋ค.
dp[2] = money[i] + max(dp[i-2], dp[i-1]) - ๋ง์ง๋ง์ผ๋ก n๋ฒ์งธ ์ง์ ์๋ค๊ณ ๊ฐ์ ํด์ผํ๋ค. (1๋ฒ์ง์ ํธ์์ผ๋ฏ๋ก 1๋ฒ๊ณผ ์ธ์ ํ n๋ฒ์ง์ ํธ๋ฉด ์๋จ!!)
๋ค์ 0๋ฒ์ง์ ์ํฐ๋ ๊ฒฝ์ฐ!
- 0๋ฒ์ง์ ํธ์ง ์์ผ๋ฏ๋ก dp[0] = 0
- 0๋ฒ์ง ์ํธ์์ผ๋ 1๋ฒ์ง์ ํ๋ค. dp[1] = money[1]

๐จ

๐ป์์ค ์ฝ๋
def solution(money):
answer = 0
n = len(money)
# 0๋ฒ์ง ํธ๊ธฐ
dp1 = [0] * (n - 1)
dp1[0] = money[0]
dp1[1] = 0
for i in range(2, n - 1):
dp1[i] = money[i] + max(dp1[i - 2], dp1[i - 3])
# 0๋ฒ์ง ์ํธ๊ธฐ
dp2 = [0] * (n)
dp2[0] = 0
dp2[1] = money[1]
for i in range(2, n):
dp2[i] = money[i] + max(dp2[i - 2], dp2[i - 3])
answer = max(max(dp1), max(dp2))
return answer
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค
๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/42897
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๋๋์ง
๋๋์ด ์ด๋ ๋ง์์ ํธ ๊ณํ์ ํ๊ณ ์์ต๋๋ค. ์ด ๋ง์์ ๋ชจ๋ ์ง๋ค์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋๊ทธ๋๊ฒ ๋ฐฐ์น๋์ด ์์ต๋๋ค. ๊ฐ ์ง๋ค์ ์๋ก ์ธ์ ํ ์ง๋ค๊ณผ ๋ฐฉ๋ฒ์ฅ์น๊ฐ ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ธ์ ํ ๏ฟฝ๏ฟฝ
programmers.co.kr
๋ฌธ์ ์ค๋ช
๋๋์ด ์ด๋ ๋ง์์ ํธ ๊ณํ์ ํ๊ณ ์์ต๋๋ค. ์ด ๋ง์์ ๋ชจ๋ ์ง๋ค์ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋๊ทธ๋๊ฒ ๋ฐฐ์น๋์ด ์์ต๋๋ค.

๊ฐ ์ง๋ค์ ์๋ก ์ธ์ ํ ์ง๋ค๊ณผ ๋ฐฉ๋ฒ์ฅ์น๊ฐ ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ธ์ ํ ๋ ์ง์ ํธ๋ฉด ๊ฒฝ๋ณด๊ฐ ์ธ๋ฆฝ๋๋ค.
๊ฐ ์ง์ ์๋ ๋์ด ๋ด๊ธด ๋ฐฐ์ด money๊ฐ ์ฃผ์ด์ง ๋, ๋๋์ด ํ์น ์ ์๋ ๋์ ์ต๋๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ์ฌํญ
- ์ด ๋ง์์ ์๋ ์ง์ 3๊ฐ ์ด์ 1,000,000๊ฐ ์ดํ์ ๋๋ค.
- money ๋ฐฐ์ด์ ๊ฐ ์์๋ 0 ์ด์ 1,000 ์ดํ์ธ ์ ์์ ๋๋ค.
์ ์ถ๋ ฅ ์
| money | return |
| [1, 2, 3, 1] | 4 |