Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 2156๋ฒˆ - ํฌ๋„์ฃผ ์‹œ์‹ (dp, ์Šค์œ„ํ”„ํŠธ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ’€์ด)

๊ฐ์ž ๐Ÿฅ” 2022. 3. 27. 12:26
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ๋งํฌ

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

 

2156๋ฒˆ: ํฌ๋„์ฃผ ์‹œ์‹

ํšจ์ฃผ๋Š” ํฌ๋„์ฃผ ์‹œ์‹ํšŒ์— ๊ฐ”๋‹ค. ๊ทธ ๊ณณ์— ๊ฐ”๋”๋‹ˆ, ํ…Œ์ด๋ธ” ์œ„์— ๋‹ค์–‘ํ•œ ํฌ๋„์ฃผ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ํฌ๋„์ฃผ ์ž”์ด ์ผ๋ ฌ๋กœ ๋†“์—ฌ ์žˆ์—ˆ๋‹ค. ํšจ์ฃผ๋Š” ํฌ๋„์ฃผ ์‹œ์‹์„ ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ๊ทœ

www.acmicpc.net

 

๋‚˜์˜ ํ’€์ด

๋จผ์ € ๊ทœ์น™์„ ์ฐพ๋Š”๋ฐ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๊ฑธ๋ ท๋‹ค. ๊ณผ์—ฐ ์ด๋ ‡๊ฒŒ ํ‘ธ๋Š”๊ฒŒ ์•ž์—๊บผ๊ฐ€ ์„ธ๊ฐœ ๋ฐ˜๋ณต๋˜์ง€ ์•Š๊ณ  ๊ตฌํ•˜๋Š”๊ฒŒ ๋งž๋‚˜? ์‹ถ์—ˆ๋˜ ์˜์‹ฌ์ด ๋“ค์—ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ ํ™”์‹์„ ์ƒ์„ฑํ•˜๋ฉด์„œ, ๋‘๋ฒˆ ์—ฐ์† ๋‚˜์˜จ๊ฑด ์ œ์™ธํ•˜๊ณ  ์ ํ™”์‹์„ ์„ธ์›Œ์ฃผ๋ฉด ๋˜๋Š” ๊ฑฐ์˜€๋‹ค. (์ด๊ฒŒ๋ฌด์Šจ๋ง์ด์ง€,, ๋ง๋กœํ‘œํ˜„์ด ์•ˆ๋˜๋„ค ใ… ใ… ) ์–ด์จ‹๋“  ํ’€์ด๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์˜ˆ์‹œ๋กœ ์ค€๊ฒƒ ์ฒ˜๋Ÿผ, ํฌ๋„์ฃผ๊ฐ€ 6๊ฐœ ์ฃผ์–ด์กŒ๋”ฐ๋ฉด, ์œ„์™€ ๊ฐ™์ด ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ตœ๋Œ€๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ณด๊ณ  ์•„๋ž˜์™€ ๊ฐ™์€ ์ ํ™”์‹์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. dp๋Š” ์ตœ๋Œ€๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’ (ํ‘œ์—์„œ 4ํ–‰)์„ ๋„ฃ์–ด์ค€ ๋ฐฐ์—ด์ด๋‹ค.

dp[5] ๋Š” ์œ„์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ ์ตœ๋Œ€ ๊ฐ’์„ ๊ตฌํ•ด ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ์ด๊ฒƒ์„ max() ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ•ด์ฃผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

์†Œ์Šค ์ฝ”๋“œ - ๋งž์•˜์Šต๋‹ˆ๋‹ค!

  • n ์€ ์ž…๋ ฅ๋ฐ›์„ ํฌ๋„์ฃผ์˜ ๊ฐœ์ˆ˜
  • podoju ๋Š” ์ž…๋ ฅ๋ฐ›์€ ํฌ๋„์ฃผ์˜ ์–‘
  • dp ๋Š” podoju[i] i ๋ฒˆ์งธ ํฌ๋„์ฃผ๊นŒ์ง€ ๋งˆ์…จ์„๋•Œ์˜ ์ตœ๋Œ€ ๊ฐ’์„ ๋„ฃ์–ด์ค€ ๋ฐฐ์—ด
  • n>1, n>2 ์กฐ๊ฑด์„ ๊ผญ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ n=1 ์ด๋ผ๋ฉด, n>2 ์•ˆ์—์žˆ๋Š” ์ ํ™”์‹์„ ํ†ต๊ณผํ•  ํ•„์š”๋„ ์—†๊ณ , range of index ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 
let n = Int(readLine()!)!
var podoju: [Int] = []
var dp = Array(repeating: 0, count: n+1)
podoju.append(0)

for _ in 1...n {
    podoju.append(Int(readLine()!)!)
}

dp[1] = podoju[1]

if n > 1 {
    dp[2] = podoju[2]+podoju[1]
}

if n > 2{
    for i in 3..<n+1 {
        dp[i] = max(dp[i-1], dp[i-3] + podoju[i-1] + podoju[i], dp[i-2] + podoju[i])
    }
}

print(dp[n])
๋ฐ˜์‘ํ˜•