๐ ๋ฌธ์
https://www.acmicpc.net/problem/14501
๐ ๋ฌธ์ ํ์ด
์ด์ ์ ๋ดค๋ ๋ฌธ์ ์๋๊ฒ ๊ธฐ์ต๋ฌ๋ค. ๋ฌธ์ ๋ ๋ฑ ๋ณด์๋ง์ dp ์์ ํ์ ํ ์ ์์๋ค. ๋ด๊ฐ ํ์์ ์ข์ํ๋ dp ์ ํ์ด์๋ค!
์ด๋ ๊ฒ ํ์ด๋ฅผ ์๊ฐํด๋ด๊ณ , ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
let n = Int(readLine()!)!
var arr = [[0, 0]]
for _ in 0..<n {
arr.append(readLine()!.split(separator: " ").map{ Int($0)! })
}
var dp = Array(repeating: 0, count: 21) // ์ต๋ N -> 15์ผ, ์๋ด term ์ต๋ 5์ผ
for i in 1..<n+1 {
if i+arr[i][0] > n {
continue
}
dp[i+arr[i][0]] = max(arr[i][1] + dp[i], dp[i])
}
print(dp.max()!)
์ด๋ ๊ฒ ํธ๋๊น ํ๋ ธ๋ค๊ณ ๋จ๋ ๊ฒ์ด๋ค.... ์์ง??
๊ณฐ๊ณฐํ ์๊ฐํด๋ณด๋๊น, ์๋์ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๋๋ ํ๋จํ์ง ์์๋ค. 4์ผ์ฐจ์ ์๋ก์ด ์๋ด์ ์งํํ์ง ์๊ณ , ์ด์ ์ ๊ฐ์ด ์ ์ง๋๋๊ฒ ๋ ํฐ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ์ง ์์๋ ๊ฒ์ด๋ค.
์ด๋ฐ ๊ฒฝ์ฐ๊น์ง ๋ชจ๋ ํฌํจ์์ผ์ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์ด์ผํ๋ค. ๋ค์ใด
let n = Int(readLine()!)!
var arr = [[0, 0]]
for _ in 0..<n {
arr.append(readLine()!.split(separator: " ").map{ Int($0)! })
}
var dp = Array(repeating: 0, count: 21) // ์ต๋ N -> 15์ผ, ์๋ด term ์ต๋ 5์ผ
for i in 1..<n+1 {
if i+arr[i][0] > n+1 {
continue
}
if dp[i] > dp[i+1] {
dp[i+1] = dp[i]
}
dp[i+arr[i][0]] = max(arr[i][1] + dp[i], dp[i+arr[i][0]])
}
print(dp.max()!)
์ด๋ ๊ฒ ๊ฐ์ด๋ฐ if ๋ฌธ์ ์ถ๊ฐํด์ฃผ์๋ค. ๋ด์ผ์ ๊ธ์ก์ด ์ค๋์ ๊ธ์ก๋ณด๋ค ์์ผ๋ฉด, ์ค๋์ ๊ธ์ก์ ๊ทธ๋๋ก ์ด์(?)ํด์ ๊ฐ์ ธ๊ฐ๋ฉด ๋๊ธฐ ๋๋ฌธ์ dp[i+1]์ dp[i]๋ฅผ ๋ฃ์ด์ฃผ์๋ค.
์ฌ๊ธฐ์ ๋ ํ๋ ธ๋ค.... ์... ๋๋์ฒด ๋ ์ .. ๋ญ๊ฐ๋ฌธ์ ๋ฐ... ์์ธํ ์ดํด๋ณด๋๊น, ์ฒซ๋ฒ์งธ if๋ฌธ์ด ๋ฌธ์ ์๋ค. for๋ฌธ์ ์ง์ ํ์๋ง์ if๋ฅผ ํตํด์ n+1์ด ๋์ด๊ฐ๋์ง ํ๋จ์ ํด์ฃผ๊ณ , ๋์๊ฒฝ์ฐ continueํด์ ํด๋น i๋ฅผ ์ฒ๋ฆฌํ์ง ์๋๋ก ํด์คฌ๋ค. ํ์ง๋ง, ์ด๊ฒ์ ๋ง์ฝ n+1์ ๋๋๋ผ๋, dp[i]๋ ์ฒ๋ฆฌํ ์ ์๋๋ก ํด์ฃผ์ด์ผํ๋๋ฐ, ์ด ๋ชจ๋ ๊ณผ์ ์ ๋ ๋ ค๋จน๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ์ด ๋ค๋ฅด๊ฒ ๋์ฌ ์ ๋ฐ์ ์๋ค. ๊ทธ๋์ if ๋ฌธ์ ์์๋ฅผ ๋ฐ๊ฟ์ค์ผ ํ๋ค. (๋ฐ๊พธ๋๊น ์ ๋ต์ด๋ค!)
๐ ์ ๋ต์ฝ๋
์,, ์ค๊ฐ์ค๊ฐ ์ธ๋ฑ์ค ๊ด๋ จํด์ ์ค๋ฅ๋ ๋ง์๊ณ , ์ด๊ฒ์ ๊ฒ if๋ฌธ์ ๋ํด์ ์๊ฐํ์ง ๋ชปํ ๋ถ๋ถ...์ด ๋ง์์ด์ ๊ต์ฅํ ๋ง์ด ํ๋ ธ๋ค. ใ ใ ใ ใ ใ ํ... ๋๋ฒ์งธ ํ์ด์ธ๋ฐ ์ค์ผ ์ฉ์ฉ๋งค๋๊ฑฐ์ง ํ์ง๋ง ๊ทธ๋๋ ํด๋๋ค!
import Foundation
let n = Int(readLine()!)!
var arr = [[0, 0]]
for _ in 0..<n {
arr.append(readLine()!.split(separator: " ").map{ Int($0)! })
}
var dp = Array(repeating: 0, count: 100)
for i in 1..<n+1 {
if dp[i] > dp[i+1] {
dp[i+1] = dp[i]
}
if i+arr[i][0] > n+1 {
continue
}
dp[i+arr[i][0]] = max(arr[i][1] + dp[i], dp[i+arr[i][0]])
}
print(dp.max()!)
dp.max()!๊ฐ์ ๋ฝ์ง ์๊ณ , dp[n+1]๊ฐ์ ๋ฝ์๋ ๋๋ค~