์•Œ๊ณ ๋ฆฌ์ฆ˜/DP

[๋ฐฑ์ค€ 2579 ๐Ÿฅˆ] ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ

1eehyunji 2023. 11. 2. 02:08

https://www.acmicpc.net/problem/2579

 

2579๋ฒˆ: ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ

๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ ๊ฒŒ์ž„์€ ๊ณ„๋‹จ ์•„๋ž˜ ์‹œ์ž‘์ ๋ถ€ํ„ฐ ๊ณ„๋‹จ ๊ผญ๋Œ€๊ธฐ์— ์œ„์น˜ํ•œ ๋„์ฐฉ์ ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒŒ์ž„์ด๋‹ค. <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ๊ฐ๊ฐ์˜ ๊ณ„๋‹จ์—๋Š” ์ผ์ •ํ•œ ์ ์ˆ˜๊ฐ€ ์“ฐ์—ฌ ์žˆ๋Š”๋ฐ ๊ณ„๋‹จ์„ ๋ฐŸ์œผ๋ฉด ๊ทธ ๊ณ„๋‹จ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ 

www.acmicpc.net

๋ฌธ์ œ

๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ ๊ฒŒ์ž„์€ ๊ณ„๋‹จ ์•„๋ž˜ ์‹œ์ž‘์ ๋ถ€ํ„ฐ ๊ณ„๋‹จ ๊ผญ๋Œ€๊ธฐ์— ์œ„์น˜ํ•œ ๋„์ฐฉ์ ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒŒ์ž„์ด๋‹ค. <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ๊ฐ๊ฐ์˜ ๊ณ„๋‹จ์—๋Š” ์ผ์ •ํ•œ ์ ์ˆ˜๊ฐ€ ์“ฐ์—ฌ ์žˆ๋Š”๋ฐ ๊ณ„๋‹จ์„ ๋ฐŸ์œผ๋ฉด ๊ทธ ๊ณ„๋‹จ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ ์ˆ˜๋ฅผ ์–ป๊ฒŒ ๋œ๋‹ค.

 

<๊ทธ๋ฆผ 1>

์˜ˆ๋ฅผ ๋“ค์–ด <๊ทธ๋ฆผ 2>์™€ ๊ฐ™์ด ์‹œ์ž‘์ ์—์„œ๋ถ€ํ„ฐ ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ๋„ค ๋ฒˆ์งธ, ์—ฌ์„ฏ ๋ฒˆ์งธ ๊ณ„๋‹จ์„ ๋ฐŸ์•„ ๋„์ฐฉ์ ์— ๋„๋‹ฌํ•˜๋ฉด ์ด ์ ์ˆ˜๋Š” 10 + 20 + 25 + 20 = 75์ ์ด ๋œ๋‹ค.

 

<๊ทธ๋ฆผ 2>

๊ณ„๋‹จ ์˜ค๋ฅด๋Š” ๋ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์ด ์žˆ๋‹ค.

  1. ๊ณ„๋‹จ์€ ํ•œ ๋ฒˆ์— ํ•œ ๊ณ„๋‹จ์”ฉ ๋˜๋Š” ๋‘ ๊ณ„๋‹จ์”ฉ ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ํ•œ ๊ณ„๋‹จ์„ ๋ฐŸ์œผ๋ฉด์„œ ์ด์–ด์„œ ๋‹ค์Œ ๊ณ„๋‹จ์ด๋‚˜, ๋‹ค์Œ ๋‹ค์Œ ๊ณ„๋‹จ์œผ๋กœ ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
  2. ์—ฐ์†๋œ ์„ธ ๊ฐœ์˜ ๊ณ„๋‹จ์„ ๋ชจ๋‘ ๋ฐŸ์•„์„œ๋Š” ์•ˆ ๋œ๋‹ค. ๋‹จ, ์‹œ์ž‘์ ์€ ๊ณ„๋‹จ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.
  3. ๋งˆ์ง€๋ง‰ ๋„์ฐฉ ๊ณ„๋‹จ์€ ๋ฐ˜๋“œ์‹œ ๋ฐŸ์•„์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์ฒซ ๋ฒˆ์งธ ๊ณ„๋‹จ์„ ๋ฐŸ๊ณ  ์ด์–ด ๋‘ ๋ฒˆ์งธ ๊ณ„๋‹จ์ด๋‚˜, ์„ธ ๋ฒˆ์งธ ๊ณ„๋‹จ์œผ๋กœ ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ฒซ ๋ฒˆ์งธ ๊ณ„๋‹จ์„ ๋ฐŸ๊ณ  ์ด์–ด ๋„ค ๋ฒˆ์งธ ๊ณ„๋‹จ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๊ฑฐ๋‚˜, ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ, ์„ธ ๋ฒˆ์งธ ๊ณ„๋‹จ์„ ์—ฐ์†ํ•ด์„œ ๋ชจ๋‘ ๋ฐŸ์„ ์ˆ˜๋Š” ์—†๋‹ค.

๊ฐ ๊ณ„๋‹จ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ ์ˆ˜๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ด ๊ฒŒ์ž„์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด ์ ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ์งธ ์ค„์— ๊ณ„๋‹จ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ œ์ผ ์•„๋ž˜์— ๋†“์ธ ๊ณ„๋‹จ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ ๊ณ„๋‹จ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ณ„๋‹จ์˜ ๊ฐœ์ˆ˜๋Š” 300์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๊ณ , ๊ณ„๋‹จ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ ์ˆ˜๋Š” 10,000์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ ๊ฒŒ์ž„์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด ์ ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

๋ฌธ์ œ ํ’€์ด

  • ๋จผ์ €, ๊ณ„๋‹จ์˜ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ ์ดํ•˜๋ผ๋ฉด ๋ฌด์กฐ๊ฑด ๋ชจ๋“  ๊ณ„๋‹จ์˜ ์ ์ˆ˜๋ฅผ ํ•ฉ์นœ ๊ฐ’์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋ฏ€๋กœ ํ•ฉ๊ณ„๋ฅผ ๊ตฌํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  • ๊ณ„๋‹จ์˜ ๊ฐœ์ˆ˜๊ฐ€ 3๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด DP๋ฅผ ์ด์šฉํ•ด์„œ ์ ํ™”์‹์„ ์„ธ์›Œ์„œ ํ’€์–ด์ฃผ๋ฉด ๋œ๋‹ค.
  • dp[num]์€ num๋ฒˆ์งธ ๊ณ„๋‹จ๊นŒ์ง€ ์˜ฌ๋ผ์™”์„ ๋•Œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ ์ˆ˜์˜ ์ตœ๋Œ“๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค.
  • ํ˜„์žฌ ๊ณ„๋‹จ์„ ๊ธฐ์ค€์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ํ˜„์žฌ ๊ณ„๋‹จ์ด ๋‘ ๊ณ„๋‹จ์„ ์—ฐ์†ํ•ด์„œ ์˜ฌ๋ผ์˜จ ๊ฒฝ์šฐ
      • 3๋ฒˆ ์—ฐ์†์œผ๋กœ ๊ณ„๋‹จ์„ ์˜ฌ๋ผ์˜ฌ ์ˆ˜๋Š” ์—†์œผ๋ฏ€๋กœ 3๋ฒˆ์งธ ์ „ ๊ณ„๋‹จ์—์„œ ๋‘ ์นธ์„ ๋›ฐ์–ด์„œ 1๋ฒˆ์งธ ์ „ ๊ณ„๋‹จ์œผ๋กœ ์˜ฌ๋ผ์˜ค๊ณ , ํ˜„์žฌ ๊ณ„๋‹จ์œผ๋กœ ์˜ฌ๋ผ์˜จ ๊ฒฝ์šฐ
        • dp[num-3] + stairs[num-1] + stairs[num]
    • ํ˜„์žฌ ๊ณ„๋‹จ ์ด์ „์— ํ•œ ์นธ์„ ๊ฑด๋„ˆ ๋›ฐ์–ด์„œ ๋‘ ์นธ์„ ์˜ฌ๋ผ์˜จ ๊ฒฝ์šฐ
      • 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])