Algorithm๐Ÿฐ/๋ฐฑ์ค€

[๋ฐฑ์ค€] Swift 11052 ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ DP

Jouureee 2022. 4. 19. 20:10

๋ฌธ์ œ :

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])