๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DP

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

by syLim___ 2023. 2. 28.
728x90

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

 

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

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

www.acmicpc.net


step: ๊ณ„๋‹จ๋ณ„๋กœ ์ ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด

dp: ํ•ด๋‹น ๊ณ„๋‹จ์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐŸ์„ ๋•Œ๊นŒ์ง€ ๋ˆ„์ ๋œ ์ตœ๊ณ ์ ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด

 

๊ณ„๋‹จ ๊ทœ์น™

  • ๊ณ„๋‹จ์€ ํ•œ ๋ฒˆ์— ํ•œ ์นธ ๋˜๋Š” ๋‘ ์นธ์”ฉ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์—ฐ์†๋œ ์„ธ ๊ฐœ์˜ ๊ณ„๋‹จ์„ ๋ฐŸ์„ ์ˆ˜๋Š” ์—†๋‹ค.

์œ„ ๊ทœ์น™์„ ์ง€ํ‚ค๋ฉด์„œ i๋ฒˆ์งธ ์นธ์„ ๊ผญ ๋ฐŸ์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

 

ํ˜„์žฌ ์œ„์น˜ํ•œ ์นธ๊นŒ์ง€ ๋ˆ„์ ๋œ ์ตœ๊ณ ์ ์ˆ˜ dp[i]๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

1. ์ง์ „ ์นธ ๋ฐŸ์ง€ ์•Š๊ธฐ

 ์ด ๊ฒฝ์šฐ ๊ฐ„๋‹จํ•˜๋‹ค.

 dp[i] = (ํ˜„์žฌ ์นธ์˜ ์ ์ˆ˜) + (i-2๋ฒˆ์งธ ์นธ๊นŒ์ง€ ๋ˆ„์ ๋œ ์ตœ๊ณ ์ ์ˆ˜) = step[i]dp[i-2]

 

2. ์ง์ „ ์นธ ๋ฐŸ๊ธฐ

(i-1)๋ฒˆ์งธ ์นธ์„ ๋ฐŸ๋Š” ๊ฒฝ์šฐ, ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ๊ทœ์น™์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด์„œ i-2๋ฒˆ์งธ ์นธ์€ ๋ฐŸ์„ ์ˆ˜ ์—†๊ณ , i-3๋ฒˆ์งธ ์นธ์€ ๋ฌด์กฐ๊ฑด ๋ฐŸ์•„์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ dp[i] = (ํ˜„์žฌ ์นธ์˜ ์ ์ˆ˜) + ((i-1)๋ฒˆ ์นธ์˜ ์ ์ˆ˜) + ((i-3)๋ฒˆ ์นธ๊นŒ์ง€ ๋ˆ„์ ๋œ ์ตœ๊ณ ์ ์ˆ˜) = step[i] + step[i-1] + dp[i-3]

 


์ฆ‰, ์ ํ™”์‹์„ ์„ธ์›Œ๋ณด๋ฉด

dp[i] = max ( step[i]+dp[i-2], step[i]+step[i-1]+dp[i-3] )

 

์ ํ™”์‹์€ i>=3 ์ธ ๊ฒฝ์šฐ์—๋งŒ ๋งŒ์กฑํ•˜๋ฏ€๋กœ dp[0]~dp[2]๋Š” ๋”ฐ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ์‹œ์ผœ์ค€๋‹ค.

(๋ฐฐ์—ด์ด 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ ๊ณ„๋‹จ ๋ฒˆํ˜ธ๋Š” 0๋ถ€ํ„ฐ ์„ผ๋‹ค)

 

0๋ฒˆ ์นธ: dp[0] =step[0]

 

1๋ฒˆ ์นธ:

1๋ฒˆ ์นธ์„ ๋ฐŸ์œผ๋ ค๋ฉด ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅด๋ฉด ๋˜๋Š”๋ฐ,

0๋ฒˆ ์นธ์„ ๋ฐŸ๋Š” ๊ฒŒ ๋ฌด์กฐ๊ฑด ์ด๋“์ด๋‹ค.

๋”ฐ๋ผ์„œ dp[1] = step[1] + step[0]

 

2๋ฒˆ ์นธ:

2๋ฒˆ์นธ์„ ๋ฐŸ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๊ณ„๋‹จ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์œ„ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์ด๋‹ค.

๋‘˜ ์ค‘ ๋” ํฐ ๊ฐ’์„ ๊ณ ๋ฅด๋ฉด ๋œ๋‹ค.

dp[2] = max( step[2] + step[1] , step[2] + step[0])

 


ํŒŒ์ด์ฌ ์ฝ”๋“œ

import sys
input = sys.stdin.readline

n = int(input())
step=[]
for i in range(n):
  step.append(int(input()))

if n<=2:
  print(sum(step))
  exit()
if n==3:
  print(max(step[0]+step[2],step[1]+step[2]))
  exit()
  
dp = [0]*n
  
dp[0]=step[0]
dp[1]=step[1]+step[0]
dp[2]=max(step[2]+step[1], step[2]+step[0])

for i in range(3,n):
  dp[i]=max(step[i]+dp[i-2], step[i]+step[i-1]+dp[i-3])

print(dp[-1])
728x90