์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ“š/๋ฐฑ์ค€

[๋ฐฑ์ค€] 2579. ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ | ํŒŒ์ด์ฌ

leejaejae 2024. 7. 18. 22:28

๋ฐฑ์ค€ 2579. ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ - ์‹ค๋ฒ„III

๋ฌธ์ œ ์„ค๋ช…

๊ณ„๋‹จ ๊ทœ์น™
1. ํ•œ๋ฒˆ์— 1๊ฐœ or 2๊ฐœ
2. ์—ฐ์†๋œ 3๊ฐœ ๋ฐŸ์„ ์ˆ˜ ์—†์Œ. ๋‹จ, ์‹œ์ž‘ ๊ณ„๋‹จ ํฌํ•จ X
3. ๋งˆ์ง€๋ง‰ ๊ณ„๋‹จ ๊ผญ ๋ฐŸ๊ธฐ

โŸน ์ ์ˆ˜ ์ตœ๋Œ€๊ฐ’? 


 

* ์ฃผ์˜ 1

์ฒ˜์Œ 3์นธ์— ๋Œ€ํ•œ ์ดˆ๊ธฐํ™” ๋จผ์ € ํ•ด์•ผํ•จ! (๊ณ„๋‹จ์ด 3๊ฐœ ๋ฐ–์— ์—†์„ ๊ฒฝ์šฐ ๊ณ ๋ ค!)

dp[1]์˜ ์ตœ๋Œ€ → ๊ทธ๋ƒฅ ๊ณ„๋‹จ 1์นธ
dp[2]์˜ ์ตœ๋Œ€ → ๊ณ„๋‹จ 1์นธ + ๊ณ„๋‹จ 2์นธ
dp[3]์˜ ์ตœ๋Œ€ → max(โ‘ข + โ‘ก, โ‘ข + โ‘ )

 

* ์ฃผ์˜ 2

์ด ๋ฌธ์ œ๋Š” ๊ณ„๋‹จ์˜ ํฌ๊ธฐ๊ฐ€ ํ•œ์ •๋˜์–ด ์žˆ์—ˆ์Œ(301๊ฐœ ์ตœ๋Œ€)! ๊ทธ๋ž˜์„œ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๋ฅผ N๊ฐœ(์‹ค์ œ๋ก  (n+1)๋กœ ๊ตฌํ˜„)๋กœ ์„ค์ •ํ•˜๋ฉด ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๊ฐ€ ๋œธ!

301์ด ๋” ์ž‘์œผ๋‹ˆ๊น ์ฃผ์–ด์ง„ ์กฐ๊ฑด ๊ทธ๋ƒฅ ์“ฐ์ž~


ํŒŒ์ด์ฌ ์ฝ”๋“œ

N = int(input())
stairs = [0] * 301
for i in range(1, N+1):
    stairs[i] = int(input())

dp = [0] * 301
dp[1] = stairs[1]
dp[2] = stairs[1] + stairs[2]
dp[3] = max(stairs[1] + stairs[3], stairs[2] + stairs[3])

for i in range(4, N+1):
    dp[i] = max(stairs[i] + stairs[i-1] + dp[i-3], stairs[i] + dp[i-2])

print(dp[N])