ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
๊ณ๋จ ์๋ ์์์ ๋ถํฐ ๊ผญ๋๊ธฐ์ ์์นํ ๋์ฐฉ์ ๊น์ง ๋์ฐฉํ๊ณ ์ ํ๋ค. ๊ฐ ๊ณ๋จ์๋ ํ๋ํ ์ ์๋ ์ ์๊ฐ ์์ผ๋ฉฐ, ๊ณ๋จ์ ๋ฐ์ ์ ์๋ ๊ท์น์ด ์กด์ฌํ๋ค.
- ๊ณ๋จ์ ํ ๋ฒ์ ํ ๊ณ๋จ์ฉ ๋๋ ๋ ๊ณ๋จ์ฉ ์ค๋ฅผ ์ ์๋ค.
- ์ฐ์๋ ์ธ ๊ฐ์ ๊ณ๋จ์ ๋ชจ๋ ๋ฐ์์๋ ์๋๋ค.
- ๋ง์ง๋ง ๋์ฐฉ ๊ณ๋จ์ ๋ฐ๋์ ๋ฐ์์ผ ํ๋ค.
๋ฐ๋ผ์ ์ด ๋ฌธ์ ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ป์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ค ๊ฐ์ฅ ํฐ ์๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ ๊ฐ๋ค. ๊ณ๋จ์ ๊ฐ์๊ฐ 300๊ฐ ์ดํ์ด๋ฏ๋ก `DFS`๋ก ํ๊ฒ ๋ ๊ฒฝ์ฐ ๋น์ฐํ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ `DP`๋ก ํ์ด์ผ ํ๋ค. `DP`๋ก ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฌธ์ ๋ฅผ ์ ๊ทผํ๋ฉด ๋๋ค.
- ์ด๊ธฐ์ ํ์ฉํ DP ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๊ธฐํํ๋ค.
- `DP[0] = ์ฒซ ๋ฒ์งธ ๊ณ๋จ`
- `DP[1] = ์ฒซ ๋ฒ์งธ ๊ณ๋จ + ๋ ๋ฒ์งธ ๊ณ๋จ`
- `DP[2] = max(์ฒซ ๋ฒ์งธ ๊ณ๋จ + ์ธ ๋ฒ์งธ ๊ณ๋จ, ์ฒซ ๋ฒ์งธ ๊ณ๋จ + ๋ ๋ฒ์งธ ๊ณ๋จ)`
- ์ดํ DP[3] ๋ถํฐ๋ ์ ํ์์ ํตํด ๊ฐ์ ๊ณ์ฐํ ์ ์๋ค.
- `DP[N] = ํ์ฌ ๊ณ๋จ + max(์ ๊ณ๋จ + ์ ์ ์ ๊ณ๋จ, ์ ์ ๊ณ๋จ)`
- ์ต๋ 3์นธ์ ์ฐ์ํด์ ๋ฐ์ ์ ์์ด, ํ์ฌ ์นธ์ ๊ธฐ์ค์ผ๋ก ์์ ๊ฐ์ ์ ํ์์ ํตํด ๋ต์ ์ฐพ์ ์ ์๋ค.
์ฝ๋
from sys import stdin
if __name__ == '__main__':
n = int(stdin.readline())
stair = [int(stdin.readline()) for _ in range(n)]
# 3๋ณด๋ค ์์ ๊ฒฝ์ฐ, ์๋ ๋ก์ง์ ์ธ๋ฑ์ค ์ค๋ฅ ๋ฐ์
if n < 3:
print(sum(stair))
exit(0)
dp = [0] * n
# dp[0], dp[1], dp[2] ์ด๊ธฐํ
dp[0], dp[1] = stair[0], sum(stair[:2])
dp[2] = max(stair[1] + stair[2], stair[0] + stair[2])
for i in range(3, n):
'''
์ฐ์ํด์ ๋ฐ์ ์ ์์ผ๋ฏ๋ก
1. ํ์ฌ ๊ณ๋จ + ์ ๊ณ๋จ + ์ ์ ์ ๊ณ๋จ
2. ํ์ฌ ๊ณ๋จ + ์ ์ ๊ณ๋จ
'''
dp[i] = stair[i] + max(stair[i - 1] + dp[i - 3], dp[i - 2])
print(dp[-1])
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 16943 ์ซ์ ์ฌ๋ฐฐ์น (2) | 2020.10.10 |
---|---|
๋ฐฑ์ค: 2133 ํ์ผ ์ฑ์ฐ๊ธฐ (0) | 2020.10.09 |
๋ฐฑ์ค: 16637 ๊ดํธ ์ถ๊ฐํ๊ธฐ (4) | 2020.10.06 |
๋ฐฑ์ค: 17070 ํ์ดํ ์ฎ๊ธฐ๊ธฐ 1 (0) | 2020.10.05 |
๋ฐฑ์ค: 1655 ๊ฐ์ด๋ฐ๋ฅผ ๋งํด์ (0) | 2020.10.04 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ