MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/BAEKJOON

[swift] ๋ฐฑ์ค€ - 12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

MUKER 2023. 3. 30. 16:09
 

12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

์ฒซ ์ค„์— ๋ฌผํ’ˆ์˜ ์ˆ˜ N(1 ≤ N ≤ 100)๊ณผ ์ค€์„œ๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ K(1 ≤ K ≤ 100,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ W(1 ≤ W ≤ 100,000)์™€ ํ•ด๋‹น ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜ V(0 ≤ V ≤ 1,000)

www.acmicpc.net


๋‚˜์˜ ํ’€์ด

let NK = readLine()!.split(separator: " ").map { Int($0)! }
let N = NK[0]
let K = NK[1]
var goods = Array(repeating: [Int](), count: N+1) // [weight, value]
for i in 1...N {
    goods[i] += readLine()!.split(separator: " ").map { Int($0)! }
}

var dp = Array(repeating: Array(repeating: 0, count: K+1), count: N+1)
for i in 1...N {
    let weight = goods[i][0]
    let cost = goods[i][1]
    for j in 1...K {
        dp[i][j] = dp[i-1][j]
        if j >= weight {
            dp[i][j] = max(dp[i][j], dp[i-1][j-weight] + cost)
        }
    }
}
print(dp[N][K])

ํ’€์ด ํ‚ค์›Œ๋“œ

DP
goods๋ผ๋Š” 2์ฐจ์›๋ฐฐ์—ด์— ๋ฌผ๊ฑด์„ ๋„ฃ์–ด๊ฐ€๋ฉฐ ์ˆ˜๋‚ฉ ๊ฐ€๋Šฅ ๋ฌด๊ฒŒ๋งˆ๋‹ค ์ตœ๋Œ€ ์ˆ˜๋‚ฉ value๋ฅผ ๊ธฐ์–ตํ•˜์—ฌ
์ œ์ผ ํฐ value๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
์ด๊ฒŒ ์ƒ๊ฐ๋ณด๋‹ค ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์› ์œผ๋ฉฐ, ๊ฐ’์„ ๊ธฐ์–ตํ•ด ๋†จ๋‹ค๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์จ๊ฐ€๋ฉฐ ๋˜ ์ €์žฅํ•œ๋‹ค๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์„ ์™„์ „ํžˆ ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐœ์„ ํ•œ ํ’€์ด

let NK = readLine()!.split(separator: " ").map { Int($0)! }
let N = NK[0] // ๋ฌผํ’ˆ์˜ ์ˆ˜
let K = NK[1] // ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ

var dp = Array(repeating: 0, count: K+1)
for _ in 0..<N {
    let WV = readLine()!.split(separator: " ").map { Int($0)! }
    let W = WV[0] // ๋ฌผํ’ˆ์˜ ๋ฌด๊ฒŒ
    let V = WV[1] // ๋ฌผํ’ˆ์˜ ๊ฐ€์น˜
    
    for i in stride(from: K - W, through: 0, by: -1) {
        if (i == 0 || dp[i] > 0) && dp[i] + V > dp[i+W] {
            dp[i+W] = dp[i] + V
        }
    }
}
print(dp.max()!)

ํ’€์ด ํ‚ค์›Œ๋“œ

DP
1์ฐจ์› ๋ฐฐ์—ด๋กœ DP๋ฅผ ํ™œ์šฉํ•ด ํ‘ผ ํ’€์ด๋‹ค.
์œ„์˜ ํ’€์ด์™€ ์ „๋ฐ˜์ ์ธ ํ’€์ด ๋งค์ปค๋‹ˆ์ฆ˜์€ ๊ฐ™๋‹ค.
๋ฌผ๊ฑด์„ ๋„ฃ์„ ๋•Œ ๋งˆ๋‹ค ๋ฌด๊ฒŒ์— ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€์น˜๋ฅผ ๋„ฃ๊ณ 
๋‹ค์Œ ๋ฌผ๊ฑด์„ ๋„ฃ์„ ๋•Œ ๋‚จ๋Š” ๋ฌด๊ฒŒ์™€ ํ˜„์žฌ ๋ฌด๊ฒŒ์˜ value๊ฐ€ ํ˜„์žฌ ๋ฌด๊ฒŒ์˜ value๋ณด๋‹ค ๋†’๋‹ค๋ฉด
๋†’์€ value๋ฅผ ๊ธฐ์–ตํ•˜๋ฉฐ ํ‘ธ๋Š” ๋ฐฉ์‹์ด๋‹ค.
stride()๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ์ œํ•œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋‚ฎ์€ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋œ ๊ฑฐ ๊ฐ™๋‹ค.