요구능력 : DP의 개념을 아느냐
코드설명 :
위에 링크를 클릭하고 가면 자세한 설명이되어있다.
위의 링크의 코드와 다른점은 기존의 dp[i] 와 dp[i -j] + dp[j] 를 비교하여 더작은값을 dp[i]에 넣는다는 것이다.
dp[i] = dp[i-j] + dp[j] > dp[i] ? dp[i] : dp[i-j] + dp[j]
후기 : DP개념을 알고, 최소값이 나오는 경우의수를 알고있으면 풀만한문제
let n = Int(readLine()!)! //구매하려고하는 카드의개수
let arr = readLine()!.split(separator: " ").map{Int($0)!}
var dp = Array(repeating: 0, count: 10001)
for i in 0..<n {
dp[i + 1] = arr[i]
}
for i in stride(from: 2, through: n, by: 1) {
for j in stride(from: 1, to: i, by: 1) {
dp[i] = dp[i-j] + dp[j] > dp[i] ? dp[i] : dp[i-j] + dp[j]
}
}
print("\(dp[n])")
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
[Swift][Greedy] 백준 5585번 (거스름돈) (0) | 2021.08.31 |
---|---|
[Swift][DP] 백준 15990번 (1, 2, 3 더하기 5) (0) | 2021.08.31 |
[Swift][DP] 백준 11052번 (카드 구매하기) (0) | 2021.08.30 |
Swift) 백준 9095번 (1, 2, 3 더하기) (0) | 2021.08.29 |
Swift) 백준 11727 (2 x n타일링2) (0) | 2021.08.29 |
댓글