본문 바로가기
Algorithm/문제풀이_백준

[Swift][DP] 백준 2293번 (동전1)

by Joahnee 2022. 2. 15.

요구능력 : 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])

댓글