0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구해야한다.
따라서 K개의 합으로 표현되는 정수 N의 값들을 포함하는 2차원 배열인 dp를 사용하여야 한다.
예를들어, 3개의 합으로 표현되는 정수 5의 값을 dp[3][5]에 넣는것이다.
import Foundation
let nums = readLine()!.split(separator: " ").map { Int(String($0))!}
let N = nums[0]
let K = nums[1]
var dp = Array(repeating: Array(repeating: 1, count: 201), count: 201)
for i in 1..<201 {
dp[2][i] = i + 1
}
for i in 1..<201 {
dp[i][1] = i
}
if K > 2 && N > 1 {
for i in 3...K {
for j in 2...N {
var sum = 0
for k in 0...j {
sum = (sum + dp[i-1][k])%1000000000
}
dp[i][j] = sum%1000000000
}
}
}
print(dp[K][N]%1000000000)