์์ ๋ฌธ์ ๋ค์ด๋ ๋น์ทํ๋๋ฐ ์ด๊ฑด ์กฐ๊ธ ํค๋งธ๋ค..
๋ค๋ฅธ ์ฌ๋๋ค์ด๋ ๊ฐ์ ๋ก์ง์ ์ฝ๋์ธ๋ฐ ๊ณ์ ์ธ๋ฑ์ค ์๋ฌ๊ฐ ๋์ ๋์ฒด ์๊ทธ๋ฌ๋ ํ๋๋ฐ
stair๋ cost๋ฅผ n๊น์ง๋ง ์ ์ฅํด์ ๊ทธ๋ฌ๋ค
n์ด 1์ธ ๊ฒฝ์ฐ๋ 2์ธ ๊ฒฝ์ฐ์ ๋ฆฌ์คํธ ์ธ๋ฑ์ค ๋๋จธ๋ก ์ ๊ทผํ๋๊น ๊ณ์ ์ค๋ฅ๊ฐ ๋ ๊ฒ ใ
์ด๋ฒ์๋ ๋ฉ์ฒญํ๋ค...
1. ๊ฐ ๊ณ๋จ์ ์ ์๋ฅผ stair ๋ฆฌ์คํธ์ ์ ์ฅํ๊ณ ๊ฐ ๊ณ๋จ์ ๋๋ฌํ ์ ์์ ์ต๋๊ฐ์ ์ ์ฅํ cost๋ฆฌ์คํธ๋ฅผ ์์ฑ, 0์ผ๋ก ์ด๊ธฐํ
2. cost[0]์ stair[0]์ ์ ์ฅ ( ์ฒซ๋ฒ์งธ ๊ณ๋จ์ ์ด์ ๊ณ๋จ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒ ์ฌ๋ผ๊ฐ๋ ์ ์๊ฐ ๊ทธ๋๋ก )
3. stair๊ณผ cost๋ฅผ n ํฌ๊ธฐ๋งํผ๋ง ๋ง๋ค์๊ธฐ ๋๋ฌธ์ n์ด 1๋ณด๋ค ํฐ์ง ํ์ธํ์ฌ cost[1]์ stair[0] + stair[1]์ ์ ์ฅ
=> n์ด 1์ด๋ฉด ๊ณ๋จ์ด ํ๋์ด๊ธฐ ๋๋ฌธ์ stair[0]๊น์ง๋ฐ์ ์ ์๊ฐ ์ ์ฅ๋์ด์์ง ์๋ค
4. n์ด 2๋ณด๋ค ํฐ์ง ํ์ธํ์ฌ cost[2]์ stair[2] + (stair[0], stair[1] ์ค ๋ ํฐ ๊ฐ)์ ์ ์ฅ
=> stair[2]์ ๊ฐ๋ ๋ฐฉ๋ฒ์ stair[0]์ ๋ฐ๊ณ ๋์ด๊ฐ๋ ๋ฐฉ๋ฒ๊ณผ, stair[1]์ ๋ฐ๊ณ ๋์ด๊ฐ๋ ๋ฐฉ๋ฒ ๋๊ฐ์ง๊ฐ ์๋ค
5. for๋ฌธ์ผ๋ก cost[3]๋ถํฐ cost[n-1]๊น์ง ์ ์๋ฅผ ๊ณ์ฐํ๋ค
5-1. cost[n] ์ ๊ฐ๋ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง์ด๋ค
5-2. stair[n-1] + stair[n-3] ์ ๋ฐ๋ ๋ฐฉ๋ฒ.
=> ์ธ ๊ณ๋จ์ ์ฐ์์ผ๋ก ๋ฐ์์๋ ์๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ ๊ณ๋จ์ ๋ฐ์๋ค๋ฉด ๋ฌด์กฐ๊ฑด ๊ทธ ์ ์ ๊ณ๋จ์ ๋ฐ์์ผ๋ง ํ๋ค
5-3. stair[n-2] ์ ๋ฐ๋ ๋ฐฉ๋ฒ. ๋ ์นธ ์ ์ ๊ณ๋จ์ ๋ฐ์ ์ ์๋ค.
=> ์ธ ์นธ ์ ์ ๊ณ๋จ๊น์ง ์ค๋ ์ต์ข ์ ์ + ํ ์นธ ์ ์ ๊ณ๋จ ๋จ๋ ์ ์ ์ ๋์นธ ์ ์ ๊ณ๋จ๊น์ง ์ค๋ ์ต์ข ์ ์๋ฅผ ๋น๊ตํ์ฌ ๋ ํฐ ๊ฐ์ stair[n]์ ๋ํด์ค๋ค
=> stair[i] + max(stair[i-1] + cost[i-3], cost[i-2])
# 2579.py
n = int(input())
stair = [int(input()) for _ in range(n)]
cost = [0 for _ in range(n)]
cost[0] = stair[0]
if n > 1:
cost[1] = stair[1] + stair[0]
if n > 2:
cost[2] = stair[2] + max(stair[0], stair[1])
for i in range(3, n):
cost[i] = stair[i] + max(stair[i-1] + cost[i-3], cost[i-2])
print(cost[n-1])