๐ฉ [๋ฐฑ์ค] [Python] Class3_2579๋ฒ_๊ณ๋จ ์ค๋ฅด๊ธฐ
๋ฌธ์
https://www.acmicpc.net/problem/2579
2579๋ฒ: ๊ณ๋จ ์ค๋ฅด๊ธฐ
๊ณ๋จ ์ค๋ฅด๊ธฐ ๊ฒ์์ ๊ณ๋จ ์๋ ์์์ ๋ถํฐ ๊ณ๋จ ๊ผญ๋๊ธฐ์ ์์นํ ๋์ฐฉ์ ๊น์ง ๊ฐ๋ ๊ฒ์์ด๋ค. <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๊ฐ๊ฐ์ ๊ณ๋จ์๋ ์ผ์ ํ ์ ์๊ฐ ์ฐ์ฌ ์๋๋ฐ ๊ณ๋จ์ ๋ฐ์ผ๋ฉด ๊ทธ ๊ณ๋จ์ ์ฐ์ฌ ์๋ ์
www.acmicpc.net
ํ์ด
# ๋ฐฑ์ค 2579๋ฒ ๋ฌธ์ - ๊ณ๋จ ์ค๋ฅด๊ธฐ
import sys
n = int(sys.stdin.readline())
stair = [0 for i in range(301)]
dp = [0 for i in range(301)]
for i in range(n):
stair[i] = int(sys.stdin.readline())
dp[0] = stair[0]
dp[1] = stair[0] + stair[1]
dp[2] = max(stair[1] + stair[2], stair[0] + stair[2])
for i in range(3, n):
dp[i] = max(dp[i - 3] + stair[i - 1] + stair[i], dp[i - 2] + stair[i])
print(dp[n - 1])
์ด๋ฒ ๋ฌธ์ ๋ DP๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ ๋ฌธ์ ์๋ค.
์ฒ์์ ์ ํ์์ ๊ตฌํ ์๊ฐ์ ํ์ง ๋ชปํ๊ณ ์ฌ๋ฌ๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ง๋ ค๊ณ ํ์ผ๋ ๋๋ฌด ๋ง์ ์์ธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ํ์์ ๊ตฌํด๋ณด์๋ค.
๋ฌธ์ ์ ๋์์๋ ๊ท์น์ ๋ง์กฑํ๊ธฐ ์ํด
dp[0], dp[1], dp[2] ๊น์ง๋ ํ๋์ฝ๋ฉ์ ํตํด ์ ์ธํด์ฃผ๊ณ
๊ทธ ๋ค์ ๊ฒฝ์ฐ๋ ๋ชจ๋ ์ ํ์์ ์ฌ์ฉํ๋๋ก ํ๋ค.