๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] Class3_2579๋ฒˆ_๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ

Dbswnstjd 2022. 10. 28. 21:59

๋ฌธ์ œ

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] ๊นŒ์ง€๋Š” ํ•˜๋“œ์ฝ”๋”ฉ์„ ํ†ตํ•ด ์„ ์–ธํ•ด์ฃผ๊ณ 

๊ทธ ๋’ค์˜ ๊ฒฝ์šฐ๋Š” ๋ชจ๋‘ ์ ํ™”์‹์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.