2156๋ฒ - ํฌ๋์ฃผ ์์
์ฐ์์ผ๋ก 3๊ฐ๋ฅผ ๊ณ ๋ฅด๋ฉด ์๋๊ณ ๋ง์ค์ ์๋ ์ต๋ ํฌ๋์ฃผ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
์ ์ ํ์๋ ๊ณ๋จ ๋ฌธ์ ์ ๋น์ทํ ๊ฐ์ด ์์์ ์๋๋ฐ ์กฐ๊ธ ๋ ๋ณต์กํฉ๋๋ค.
๋ณธ ๋ฌธ์ ๋ ์ธ ๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋ ์ ํ ์ ์์ต๋๋ค.
1. i๋ฒ์งธ ์์ ์์ ๊ณ ๋ฅด์ง ์๊ฑฐ๋
2. i-3๋ฒ์งธ ์ -> i-1๋ฒ์งธ ์ -> i๋ฒ์งธ ์์ ํตํด ์ฌ๋ผ์ค๊ฑฐ๋
3. i-2๋ฒ์งธ ์ -> i๋ฒ์งธ ์์ ํตํด ์ฌ๋ผ์ค๋ ๊ฒฝ์ฐ
์ด๋ ๊ฒ ์ธ ๊ฐ์ง๋ก ์ ๋ฆฌํ ์ ์๊ฒ ์ต๋๋ค.
์์ธํ ํ์ด๊ฐ ํ์ํ ๋ถ๋ค์
๋ฅผ ์ฐธ์กฐํ์๋ฉด ์ํํ๊ฒ ์ดํด ๊ฐ๋ฅํ์ค ๊ฒ๋๋ค.
๊ณ๋จ ์ค๋ฅด๊ธฐ์ ๋ค๋ฅธ ์ ์ ๊ณ๋จ์ ๋ฌด์กฐ๊ฑด ๋ฐ์์ผ ํ์ง๋ง ์ด ํฌ๋์ฃผ๋ ์๋ง์ ๋ ์๊ด์ด ์์ผ๋ฏ๋ก ์๋ง์๋ ๊ฒฝ์ฐ์๋ ์ด์ ๊น์ง์ ์ต๋ dp๊ฐ (dp[i-1])์ ํด๋น dp์ ๋ฃ์ด์ฃผ๋ฉด ๋๊ฒ ์ต๋๋ค.
n = int(input())
lst = []
for _ in range(n):
a = int(input())
lst.append(a)
๋ฆฌ์คํธ๋ฅผ ๋ฐ์์ค๋๋ค.
dp = [0]*n
if n>=1:
dp[0] = lst[0]
if n>=2:
dp[1] = lst[0]+lst[1]
if n>=3:
dp[2] = max(lst[0]+lst[2],lst[1]+lst[2],dp[1])
์ ํ์์์ dp[i-3]์ด ์ต์ ์ฐธ์กฐ ์ธ๋ฑ์ค์ด๋ฏ๋ก 3๊น์ง ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํด์ค๋๋ค. ๋ค๋ง, ์ฃผ์ํ ์ ์ lst์ ๊ฐ์ด 2 ์ดํ์ผ ๊ฒฝ์ฐ list out of range exception์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก 1๊ณผ 2๊ฐ์ ์ง์ ์ง์ ํด์ฃผ๋๋ก ํฉ์๋ค.
for i in range(3,n):
dp[i] = max(lst[i]+dp[i-2],lst[i]+lst[i-1]+dp[i-3])
if dp[i] < dp[i-1]:
dp[i] = dp[i-1]
3๋ถํฐ๋ ์๊น ์ธ์ด ์ ํ์ ์ค ์ต๋๊ฐ์ dp[i]์ ๋์ ์์ผ์ฃผ๋ฉด ๋ฉ๋๋ค.
print(max(dp))
๋ง์ง๋ง์ผ๋ก dp์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ฉด
์ ์์ ์ผ๋ก ํด๋ฅผ ๋์ถํ ์ ์์ต๋๋ค.