https://www.acmicpc.net/problem/2579
2579๋ฒ: ๊ณ๋จ ์ค๋ฅด๊ธฐ
๊ณ๋จ ์ค๋ฅด๊ธฐ ๊ฒ์์ ๊ณ๋จ ์๋ ์์์ ๋ถํฐ ๊ณ๋จ ๊ผญ๋๊ธฐ์ ์์นํ ๋์ฐฉ์ ๊น์ง ๊ฐ๋ ๊ฒ์์ด๋ค. <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๊ฐ๊ฐ์ ๊ณ๋จ์๋ ์ผ์ ํ ์ ์๊ฐ ์ฐ์ฌ ์๋๋ฐ ๊ณ๋จ์ ๋ฐ์ผ๋ฉด ๊ทธ ๊ณ๋จ์ ์ฐ์ฌ ์๋ ์
www.acmicpc.net
๋ฌธ์
๊ณ๋จ ์ค๋ฅด๊ธฐ ๊ฒ์์ ๊ณ๋จ ์๋ ์์์ ๋ถํฐ ๊ณ๋จ ๊ผญ๋๊ธฐ์ ์์นํ ๋์ฐฉ์ ๊น์ง ๊ฐ๋ ๊ฒ์์ด๋ค. <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ๊ฐ๊ฐ์ ๊ณ๋จ์๋ ์ผ์ ํ ์ ์๊ฐ ์ฐ์ฌ ์๋๋ฐ ๊ณ๋จ์ ๋ฐ์ผ๋ฉด ๊ทธ ๊ณ๋จ์ ์ฐ์ฌ ์๋ ์ ์๋ฅผ ์ป๊ฒ ๋๋ค.
<๊ทธ๋ฆผ 1>
์๋ฅผ ๋ค์ด <๊ทธ๋ฆผ 2>์ ๊ฐ์ด ์์์ ์์๋ถํฐ ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ๋ค ๋ฒ์งธ, ์ฌ์ฏ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ์ ๋์ฐฉ์ ์ ๋๋ฌํ๋ฉด ์ด ์ ์๋ 10 + 20 + 25 + 20 = 75์ ์ด ๋๋ค.
<๊ทธ๋ฆผ 2>
๊ณ๋จ ์ค๋ฅด๋ ๋ฐ๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ด ์๋ค.
- ๊ณ๋จ์ ํ ๋ฒ์ ํ ๊ณ๋จ์ฉ ๋๋ ๋ ๊ณ๋จ์ฉ ์ค๋ฅผ ์ ์๋ค. ์ฆ, ํ ๊ณ๋จ์ ๋ฐ์ผ๋ฉด์ ์ด์ด์ ๋ค์ ๊ณ๋จ์ด๋, ๋ค์ ๋ค์ ๊ณ๋จ์ผ๋ก ์ค๋ฅผ ์ ์๋ค.
- ์ฐ์๋ ์ธ ๊ฐ์ ๊ณ๋จ์ ๋ชจ๋ ๋ฐ์์๋ ์ ๋๋ค. ๋จ, ์์์ ์ ๊ณ๋จ์ ํฌํจ๋์ง ์๋๋ค.
- ๋ง์ง๋ง ๋์ฐฉ ๊ณ๋จ์ ๋ฐ๋์ ๋ฐ์์ผ ํ๋ค.
๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๊ณ ์ด์ด ๋ ๋ฒ์งธ ๊ณ๋จ์ด๋, ์ธ ๋ฒ์งธ ๊ณ๋จ์ผ๋ก ์ค๋ฅผ ์ ์๋ค. ํ์ง๋ง, ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ๋ฐ๊ณ ์ด์ด ๋ค ๋ฒ์งธ ๊ณ๋จ์ผ๋ก ์ฌ๋ผ๊ฐ๊ฑฐ๋, ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ, ์ธ ๋ฒ์งธ ๊ณ๋จ์ ์ฐ์ํด์ ๋ชจ๋ ๋ฐ์ ์๋ ์๋ค.
๊ฐ ๊ณ๋จ์ ์ฐ์ฌ ์๋ ์ ์๊ฐ ์ฃผ์ด์ง ๋ ์ด ๊ฒ์์์ ์ป์ ์ ์๋ ์ด ์ ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ์งธ ์ค์ ๊ณ๋จ์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ ํ ์ค์ ํ๋์ฉ ์ ์ผ ์๋์ ๋์ธ ๊ณ๋จ๋ถํฐ ์์๋๋ก ๊ฐ ๊ณ๋จ์ ์ฐ์ฌ ์๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ๊ณ๋จ์ ๊ฐ์๋ 300์ดํ์ ์์ฐ์์ด๊ณ , ๊ณ๋จ์ ์ฐ์ฌ ์๋ ์ ์๋ 10,000์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ณ๋จ ์ค๋ฅด๊ธฐ ๊ฒ์์์ ์ป์ ์ ์๋ ์ด ์ ์์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.

๋ฌธ์ ํ์ด
- ๋จผ์ , ๊ณ๋จ์ ๊ฐ์๊ฐ 2๊ฐ ์ดํ๋ผ๋ฉด ๋ฌด์กฐ๊ฑด ๋ชจ๋ ๊ณ๋จ์ ์ ์๋ฅผ ํฉ์น ๊ฐ์ด ์ต๋๊ฐ ๋๋ฏ๋ก ํฉ๊ณ๋ฅผ ๊ตฌํ๊ณ ํ๋ก๊ทธ๋จ์ ์ข ๋ฃํ๋ค.
- ๊ณ๋จ์ ๊ฐ์๊ฐ 3๊ฐ ์ด์์ด๋ผ๋ฉด DP๋ฅผ ์ด์ฉํด์ ์ ํ์์ ์ธ์์ ํ์ด์ฃผ๋ฉด ๋๋ค.
- dp[num]์ num๋ฒ์งธ ๊ณ๋จ๊น์ง ์ฌ๋ผ์์ ๋ ๊ฐ์ง ์ ์๋ ์ ์์ ์ต๋๊ฐ์ ์๋ฏธํ๋ค.
- ํ์ฌ ๊ณ๋จ์ ๊ธฐ์ค์ผ๋ก ๋ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ๊ฐ๋ฅํ๋ค.
- ํ์ฌ ๊ณ๋จ์ด ๋ ๊ณ๋จ์ ์ฐ์ํด์ ์ฌ๋ผ์จ ๊ฒฝ์ฐ
- 3๋ฒ ์ฐ์์ผ๋ก ๊ณ๋จ์ ์ฌ๋ผ์ฌ ์๋ ์์ผ๋ฏ๋ก 3๋ฒ์งธ ์ ๊ณ๋จ์์ ๋ ์นธ์ ๋ฐ์ด์ 1๋ฒ์งธ ์ ๊ณ๋จ์ผ๋ก ์ฌ๋ผ์ค๊ณ , ํ์ฌ ๊ณ๋จ์ผ๋ก ์ฌ๋ผ์จ ๊ฒฝ์ฐ
- dp[num-3] + stairs[num-1] + stairs[num]
- 3๋ฒ ์ฐ์์ผ๋ก ๊ณ๋จ์ ์ฌ๋ผ์ฌ ์๋ ์์ผ๋ฏ๋ก 3๋ฒ์งธ ์ ๊ณ๋จ์์ ๋ ์นธ์ ๋ฐ์ด์ 1๋ฒ์งธ ์ ๊ณ๋จ์ผ๋ก ์ฌ๋ผ์ค๊ณ , ํ์ฌ ๊ณ๋จ์ผ๋ก ์ฌ๋ผ์จ ๊ฒฝ์ฐ
- ํ์ฌ ๊ณ๋จ ์ด์ ์ ํ ์นธ์ ๊ฑด๋ ๋ฐ์ด์ ๋ ์นธ์ ์ฌ๋ผ์จ ๊ฒฝ์ฐ
- dp[num-2] + stairs[num]
- ํ์ฌ ๊ณ๋จ์ด ๋ ๊ณ๋จ์ ์ฐ์ํด์ ์ฌ๋ผ์จ ๊ฒฝ์ฐ
- ์ด ๋ ๊ฐ์ง ๊ฒฝ์ฐ ์ค ๋ ํฐ ๊ฐ์ dp[num]์ ์ ์ฅํด์ฃผ๋ฉด ๋๋ค.
- ์ฒซ ๋ฒ์งธ ๊ณ๋จ์ ์ฌ๋ผ์ค๋ ๊ฒฝ์ฐ์ ๋ ๋ฒ์งธ ๊ณ๋จ์ ์ฌ๋ผ์ค๋ ๊ฒฝ์ฐ๋ ๊ฐ๊ฐ stairs[1] , stairs[1] + stairs[2] ํ ๊ฒฝ์ฐ๋ง ๊ฐ๋ฅํ๋ฏ๋ก dp[1], dp[2]๋ฅผ ์ ์ฅํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ธ ๋ฒ์งธ ๊ณ๋จ๋ถํฐ n๋ฒ์งธ ๊ณ๋จ๊น์ง dp๊ฐ์ ๊ฐฑ์ ํ๊ณ , dp[n]์ ์ถ๋ ฅํ๋ฉด ๋!
import sys
n=int(sys.stdin.readline())
stairs=[int(sys.stdin.readline()) for _ in range(n)]
stairs.insert(0,0)
if n<=2:
print(sum(stairs))
sys.exit(0)
dp=[0]*(n+1)
dp[1]=stairs[1]
dp[2]=stairs[1]+stairs[2]
for i in range(3, n+1):
dp[i]=max(dp[i-3]+stairs[i-1], dp[i-2])+stairs[i]
print(dp[n])
'์๊ณ ๋ฆฌ์ฆ > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 17626 ๐ฅ] Four Squares (1) | 2023.11.02 |
---|---|
[๋ฐฑ์ค 9095 ๐ฅ] 1,2,3 ๋ํ๊ธฐ (1) | 2023.11.02 |
[๋ฐฑ์ค 1463 ๐ฅ] 1๋ก ๋ง๋ค๊ธฐ (0) | 2023.11.02 |
[๋ฐฑ์ค 15486 ๐ฅ] ํด์ฌ 2 (0) | 2023.09.24 |
[๋ฐฑ์ค 1520 ๐ฅ] ๋ด๋ฆฌ๋ง ๊ธธ (0) | 2023.08.30 |