요구능력 : DP
코드설명 :
유튜브에서 이분 강의를 보고 문제를 해결했다.
너무 설명을 잘해주셔서 더 잘하기는 어려울거같아서 링크를 첨부합니다
번외로 8%에서 런타임에러였을때의 문제점은 dp값이 2의 31승을 넘어가서 그랬고,
16%에서 런타임에러였을때의 문제점은 coin의 가치가 k값을 넘어가버려서 그랬다.
swift는 for문 사용 시 coin[i]...k처럼 하면 coin값이 k를 넘어갈 경우 에러가 발생하고,
stride를 사용하면 coin값이 k를 넘어갈경우 그냥 돌리지않는다.
사실 k값만드는데 coin값이 더 커버리면 그 코인값은 쓸 필요가 없다.
후기 : 많이 반성하게되는 문제였다.
import Foundation
let nk = readLine()!.split(separator: " ").map{Int(String($0))!}
let n = nk[0]
let k = nk[1]
var coin = [Int]()
for _ in 0..<n{
coin.append(Int(String(readLine()!))!)
}
var dp = Array(repeating: 0, count: k + 1)
dp[0] = 1
for i in 0..<n{
for j in stride(from: coin[i], through: k, by: 1){
if dp[j] + dp[j - coin[i]] >= Int(pow(2.0, 31.0)){
dp[j] = 0
}else{
dp[j] += dp[j - coin[i]]
}
}
}
print(dp[k])
'Algorithm > 문제풀이_백준' 카테고리의 다른 글
[Swift][DFS] 백준 18290번 (NM과 K(1)) (0) | 2022.02.17 |
---|---|
[Swift][BFS] 백준 12906번 (새로운 하노이 탑) (0) | 2022.02.16 |
[Swift][DFS][BFS] 백준 17142 (연구소 3) (0) | 2022.02.11 |
[Swift][DP] 백준 10422번 (괄호) (0) | 2022.02.07 |
[Swift][DFS][BFS] 백준 17141번 (연구소 2) (0) | 2022.02.07 |
댓글