๐ŸŽฒ ๋ฐฑ์ค€ 9184๋ฒˆ ์‹ ๋‚˜๋Š” ํ•จ์ˆ˜ ์‹คํ–‰

Jeongeunยท2023๋…„ 7์›” 9์ผ
0

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
88/187

๋ฐฑ์ค€ 9184๋ฒˆ

๐Ÿงธ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ํ•จ์ˆ˜์˜ ๊ฐ’์„ dp๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค...!
๐ŸŽจ ์ฐธ๊ณ  ์ฝ”๋“œ

์ฝ”๋“œ

const fs = require('fs'); 
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

const dp = Array.from(new Array(21), () =>
  Array.from(new Array(21), () => new Array(21).fill(null))
);

const w = (a, b, c) => {
  if (a <= 0 || b <= 0 || c <= 0) {
    return 1;
  }
  if (a > 20 || b > 20 || c > 20) {
    return w(20, 20, 20);
  }

  if (dp[a][b][c]) {
    return dp[a][b][c];
  }

  if (a < b && b < c) {
    dp[a][b][c] = w(a, b, c - 1) + w(a, b - 1, c - 1) - w(a, b - 1, c);
  } else {
    dp[a][b][c] =
      w(a - 1, b, c) +
      w(a - 1, b - 1, c) +
      w(a - 1, b, c - 1) -
      w(a - 1, b - 1, c - 1);
  }

  return dp[a][b][c];
};

while (true) {
    const [a, b, c] = input.shift().split(" ").map(Number);
    if (a === -1 && b === -1 && c === -1) {
      break;
    }
    const result = w(a, b, c);
    console.log(`w(${a}, ${b}, ${c}) = ${result}`)
  }

0๊ฐœ์˜ ๋Œ“๊ธ€