๐งธ์ด๋ ต๊ฒ ์๊ฐํ๋๋ฐ ํจ์์ ๊ฐ์ 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}`)
}