[๋ฐฑ์ค] Swift 11052 ์นด๋ ๊ตฌ๋งคํ๊ธฐ DP
๋ฌธ์ :
https://www.acmicpc.net/problem/11052
11052๋ฒ: ์นด๋ ๊ตฌ๋งคํ๊ธฐ
์ฒซ์งธ ์ค์ ๋ฏผ๊ท๊ฐ ๊ตฌ๋งคํ๋ ค๊ณ ํ๋ ์นด๋์ ๊ฐ์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1,000) ๋์งธ ์ค์๋ Pi๊ฐ P1๋ถํฐ PN๊น์ง ์์๋๋ก ์ฃผ์ด์ง๋ค. (1 ≤ Pi ≤ 10,000)
www.acmicpc.net
๋ถ์ :
Bottom-up ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ค.
d[n] - i๊ฐ์ ์นด๋๋ฅผ ๊ตฌ๋งค์ ์ง๋ถํด์ผ ํ๋ ๊ธ์ก์ ์ต๋๊ฐ
n = 1์ด๋ผ๋ฉด arr[1]๊ฐ์ ๋ฆฌํดํ๋ค.
๊ทธ๋ฆฌ๊ณ for๋ฌธ์ ๋๋๋ฐ
n = 2๋ผ๋ฉด max(d[1] + arr[1], arr[2]) 1๊ฐ์ง๋ฆฌ ์นด๋ํฉ ์์๋์ ์ต๋๊ฐ์ 1๊ฐ์ง๋ฆฌ ์นด๋ํฉ์ ๋ ์ฌ๋ ๊ฒฝ์ฐ, 2๊ฐ์ง๋ฆฌ ์นด๋ํฉ์ ์ฌ๋ ๊ฒฝ์ฐ ์ค ์ต๋ ๊ฐ์ ์ ์ฅํ๋ค.
n = 3 -> max(d[1] + arr[2], d[2] + arr[1], arr[3]) 1๊ฐ์ง๋ฆฌ ์นด๋ํฉ ์์๋์ ์ต๋๊ฐ์ 2๊ฐ์ง๋ฆฌ ์นด๋ํฉ ์ฌ๋ ๊ฒฝ์ฐ, 2๊ฐ์ง๋ฆฌ ์นด๋ํฉ ์์๋ ์ต๋ ๊ฐ์ ํ๊ฐ์ง๋ฆฌ ์นด๋ํฉ์ ์ฌ๋ ๊ฒฝ์ฐ, 3๊ฐ์ง๋ฆฌ ์นด๋ํฉ์ ์ฌ๋ ๊ฒฝ์ฐ
... ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ์ํํ๋ฉด ์ ํ์์ ์๋ ์ฝ๋์ ๊ฐ๋ค !!
Swift ์ฝ๋ :
//
// main.swift
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2022/04/19.
//
import Foundation
var n = Int(readLine()!)!
var arr = readLine()!.split(separator: " ").map { Int(String($0))! }
var d = Array(repeating: 0, count: n + 1)
arr.insert(0, at: 0)
d[1] = arr[1]
for i in 2..<n+1 {
var maxValue = 0
for j in 1..<i {
maxValue = max(maxValue, d[j] + arr[i-j])
}
d[i] = max(arr[i], maxValue)
}
print(d[n])