[boj] 2225. 합분해 (node.js)

호이·2022년 3월 8일
0

algorithm

목록 보기
37/77
post-thumbnail

문제 요약

[boj] 2225. 합분해 (node.js)

풀이

  • DP로 풀이 가능한 경우의 수를 구하는 문제
  • 모든 경우의 수를 시간 내에 구하기 위해 점화식을 세우고 풀이한다.
    • dp[N][k]: N개의 숫자로 K를 만들 수 있는 경우의 수
    • dp[N][k] = dp[N-1][0] + dp[N-1][1] + ... + dp[N-1][k]
      ( = dp[N-1][k] + dp[N][k-1] 로 구해도 동일하다.)

내 풀이

const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

function solution() {
  const [N, K] = input().split(" ").map(Number);
  let dp = new Array(K + 1);
  dp[0] = new Array(N + 1).fill(0);
  dp[0][0] = 1;
  dynamic();
  console.log(dp[K][N]);

  function dynamic() {
    for (let i = 1; i <= K; i++) {
      dp[i] = [];
      for (let j = 0; j <= N; j++) {
        dp[i][j] = 0;
        for (let num = 0; num <= j; num++) {
          dp[i][j] += dp[i - 1][j - num];
        }
        dp[i][j] %= 1000000000;
      }
    }
  }
}

let line = 0;
const input = () => stdin[line++];

let stdin = [];
rl.on("line", function (line) {
  stdin.push(line);
}).on("close", function () {
  solution();
  process.exit();
});
profile
매일 부활하는 개복치

0개의 댓글