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

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 11052๋ฒˆ - ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ (dp max ๊ฐ’ ๊ตฌํ•˜๊ธฐ)

๊ฐ์ž ๐Ÿฅ” 2022. 3. 8. 17:48
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ ๋งํฌ

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

 

11052๋ฒˆ: ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— ๋ฏผ๊ทœ๊ฐ€ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000) ๋‘˜์งธ ์ค„์—๋Š” Pi๊ฐ€ P1๋ถ€ํ„ฐ PN๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Pi ≤ 10,000)

www.acmicpc.net

 

๋‚ด๊ฐ€ ํ‘ผ ํ’€์ด - ๋งž์•˜์Šต๋‹ˆ๋‹ค!

  • ์˜ˆ์ œ 1๋ฒˆ์„ ํ™œ์šฉํ•˜์—ฌ ์ƒ๊ฐํ•ด๋ณด์ž.
  • ์นด๋“œ ๊ฐœ์ˆ˜ n, ์ž…๋ ฅ๋˜๋Š” ๊ฐ ์นด๋“œํŒฉ์˜ ๊ฐ€๊ฒฉ์„ ๋ฐฐ์—ด p , ์นด๋“œ n ๊ฐœ๋ฅผ ๊ตฌ๋งคํ•  ๋•Œ์˜ ์ตœ๋Œ€ ๊ธˆ์•ก์„ ๋ฐฐ์—ด dp์— ๋„ฃ์„ ๊ฒƒ
  • ์นด๋“œ 4๊ฐœ, ๊ฐ€๊ฒฉ p = [1, 5, 6, 7] ์ผ๋•Œ
  • dp = [0, 0, 0, 0, 0] → ์ธ๋ฑ์Šค ๊ฐ’์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด์„œ n+1 ๊ฐœ ๋งŒํผ dp๋ฅผ 0๋ฐฐ์—ด๋กœ ์ •์˜

์ด๋ ‡๊ฒŒ ์ •์˜ํ•œ ๋’ค, dp ๋ฐฐ์—ด์— ์–ด๋–ป๊ฒŒ max ๊ฐ’์„ ๋„ฃ์„์ง€ ๊ณ ๋ฏผํ•ด๋ณด์•„์•ผ ํ•œ๋‹ค.

์นด๋“œ 4๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š”๋ฐ, ์ตœ๊ณ ๊ธˆ์•ก์„ ๊ตฌํ•ด์•ผํ•˜๋ฉด

  1. ์นด๋“œ 3๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ์ตœ๋Œ“๊ฐ’ + 1๊ฐœ์งœ๋ฆฌ ์นด๋“œํŒฉ ๊ตฌ๋งค 
    • ์นด๋“œ 3๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ๋ฐฉ๋ฒ•์€  1, 1, 1  /  2, 1  /  3  ์ด๋ ‡๊ฒŒ ์„ธ๊ฐ€์ง€ ๊ฒ ์ง€? ์šฐ๋ฆฌ๋Š” ์–ด์ฐจํ”ผ ์ตœ๋Œ€ ๊ธˆ์•ก๋งŒ ํ•„์š”ํ•˜๋‹ˆ๊นŒ, ์ด ์„ธ๊ฐ€์ง€ ์ค‘ ๊ฐ€์žฅ max ๊ฐ’๋งŒ ์ฐพ์œผ๋ฉด ๋˜๋Š” ๊ฑฐ์ž„.
  2. ์นด๋“œ 2๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ์ตœ๋Œ“๊ฐ’ + 2๊ฐœ์งœ๋ฆฌ ์นด๋“œํŒฉ ๊ตฌ๋งค
  3. ์นด๋“œ 1๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ์ตœ๋Œ“๊ฐ’ + 3๊ฐœ์งœ๋ฆฌ ์นด๋“œํŒฉ ๊ตฌ๋งค
  4. ์นด๋“œ 0๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ์ตœ๋Œ“๊ฐ’ + 4๊ฐœ์งœ๋ฆฌ ์นด๋“œํŒฉ ๊ตฌ๋งค

์ด๋ ‡๊ฒŒ ๋„ค ๊ฐ€์ง€์˜ ๊ธˆ์•ก์ค‘ ์ตœ๊ณ  ๊ธˆ์•ก์„ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ, ์œ„ ๋„ค๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋„์‹ํ™”๋ฅผ ํ•ด๋ณด์ž. dp์—๋‹ค๊ฐ€ ์ตœ๋Œ€๊ฐ’์„ ๋„ฃ๊ธฐ๋กœ ํ–ˆ์œผ๋‹ˆ๊นŒ, ์•„๋ž˜์™€ ๊ฐ™์€ ๋„์‹์„ ๋„์ถœํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

  1. dp[4-1] + p[1]
  2. dp[4-2] + p[2]
  3. dp[4-3] + p[3]
  4. dp[4-4] + p[4]

์ด ๋„ค๊ฐ€์ง€์ค‘ ์ตœ๋Œ“๊ฐ’์„ dp[4] ์— ๋„ฃ์œผ๋ฉด ์ •๋‹ต์ด๋‹ค!!

์ฆ‰, dp[n] ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ dp์— ๋“ค์–ด๊ฐˆ ๊ฐ’๋“ค์„ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•œ ์†Œ์Šค์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

let n = Int(readLine()!)!
let p = readLine()!.split(separator: " ").map { Int(String($0))! }
var dp = [Int](repeating: 0, count: n+1)

for i in 1..<n+1 {
    for j in 1..<i+1 {
        dp[i] = max(dp[i], dp[i-j]+p[j-1])
    }
}
print(dp[n])

 

 

 

dp ๋Š” ์–ด๋ ค์šด๊ฒƒ๊ฐ™์€๋ฐ ใ…  ์™œ ์ดํ•ด๊ฐ€ ๋น ๋ฆฃ๋น ๋ฆฃ ํ•˜๊ฒŒ ์•ˆ๋ ๊นŒ.. ๋” ๋งŽ์€ ์—ฐ์Šต์ด ํ•„์š”ํ•  ๊ฒƒ๊ฐ™๋‹ค. min ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ๋ฅผ ๋˜ ์‚ดํŽด๋ณด๊ณ , ํ•ด๋‹น ๋ฌธ์ œ์ฒ˜๋Ÿผ max ๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ๋„ ์ตํ˜€๋‘์ž. 

 

 

 

 

 

๋ฐ˜์‘ํ˜•