๋ฐฑ์ค 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])
'์๊ณ ๋ฆฌ์ฆ ๐ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 9095. 1, 2, 3 ๋ํ๊ธฐ | ํ์ด์ฌ (0) | 2024.07.19 |
---|---|
[๋ฐฑ์ค] 11048. ์ด๋ํ๊ธฐ | ํ์ด์ฌ (0) | 2024.07.19 |
[๋ฐฑ์ค] 1149. RGB๊ฑฐ๋ฆฌ | ํ์ด์ฌ (0) | 2024.07.19 |
[๋ฐฑ์ค] 1461. ๋์๊ด | ํ์ด์ฌ (0) | 2024.07.19 |
[๋ฐฑ์ค] 9251. LCS | ํ์ด์ฌ (0) | 2024.07.19 |