๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2579
๐ ๋ฌธ์ ํ์ด ์์ด๋์ด
๊ฐ์ฅ ๊ธฐ์ด์ ์ธ dp ๋ฌธ์ ์ค ํ๋์๋ค. ํ์ง๋ง ๊ฐ์ฅ ์ค์ํ๊ฒ์, ์๊ฐ์ ๋ฐ๋๋กํด์ผํ๋ค๋ ๊ฒ์ด์๋ค.
"์ฒ์๋ถํฐ ๊ณ๋จ์ ์ด๋ป๊ฒ ์ฌ๋ผ๊ฐ์ง?" ์๊ฐ๋ณด๋ค๋, "์ต์ข
๋์ฐฉ์ง๊ธฐ์ค์ผ๋ก ๋ดค์๋, ์ด๋์ ์ฌ๋ผ์์ฐ?"๋ฅผ ๊ณ ๋ คํด๋ด์ผํ๋ค๋ ๊ฒ์ด๋ค.
์ฐ์์ผ๋ก 3์นธ์ ๊ณ๋จ์ ๋ฐ์ ์๊ฐ ์๊ธฐ ๋๋ฌธ์, ๋์ฐฉ์ง ๊ธฐ์ค์ผ๋ก ์ฌ๋ผ์ฌ ์ ์๋ ๋ฐฉ๋ฒ์ ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ๋ฑ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ ๊ฒ dp ์ ํ์์ ์ ๋ํด๋๋ค.
dp์ ํ์์ ๋ด๊ฐ ํ ์ค์๋ฅผ ์ ์ด๋์๋ค. ์ ์ด๋ ๊ฒ ์ฒ๋ผ, ๊ทธ๋ฆผ์์ โ ๋ฒ ๋ฃจํธ์ธ ๊ฒฝ์ฐ์๋, dp[n-3] + dp[n-1] ๋ก ํด๋ฒ๋ฆฌ๋ฉด, ๋์ ๋ ํฉ์ ๋๋ฒ์ด๋ ๋ํด์ฃผ๋ ๊ฒ๊ณผ ๊ฐ์์ง๋ค. ๊ทธ๋์ dp[n-3]์๋ค๊ฐ, ๋๋จธ์ง ๋๋ฒ์ arr (๊ณ๋จ ๊ฐ๊ฐ์ ๊ฐ)์ ๋ํด์ค ๊ฒ์ ํฉ์ณ์ค์ผํ๋ค!!
๋๋ ์ฌ๊ธฐ์ dp[n-3] + dp[n-1] + arr[n] ์ด๋ผ๊ณ ์์ฑํด์ ๋ต์ด ๋์ค์ง ์์ ๊ฝค ์ค๋ซ๋์ ๊ณ ๋ฏผํ๋ค ๐
๐ ์ ๋ต ์ฝ๋
let n = Int(String(readLine()!))!
var arr = [0]
for _ in 0..<n {
arr.append(Int(String(readLine()!))!)
}
var dp = Array(repeating: 0, count: n+1)
// main
dp[0] = 0
for i in 1..<n+1 {
if i == 1 {
dp[1] = arr[1]
} else if i == 2 {
dp[2] = arr[1] + arr[2]
} else if i == 3 {
dp[3] = max(arr[3]+arr[1], arr[3]+arr[2])
} else {
dp[i] = max(arr[i] + arr[i-1] + dp[i-3], arr[i] + dp[i-2])
}
}
print(dp[n])