๐งธ ๋ต์ ๋ณด๊ณ ๋ ์ดํดํ๋๋ฐ ๊ฝค๋ ๊ฑธ๋ ธ๋ค.. DFS+DP๋ฌธ์ ๋ผ๋ ์ด์ ์ด๋ฐ ๋ฌธ์ ์๋ ์ต์ํด์ ธ์ผํ๋ค..!
๐จ ์ฐธ๊ณ ์ฝ๋
์ฝ๋
const fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const [Y, X] = input.shift().split(" ").map(Number);
input = input.map((item) => item.split(" ").map(Number));
//-1๋ก ์ด๊ธฐํ : ๋ฐฉ๋ฌธ ์ํ๋ค๋ ์๋ฏธ
const dp = Array.from(new Array(Y), () => new Array(X).fill(-1));
const dir = [
[0, 1],
[0, -1],
[1, 0],
[-1, 0],
];
const DFS = (i, j) => {
//ํ์์ง์ ์ด ๋์ฐฉ์ ์ผ ๊ฒฝ์ฐ
if (i === Y - 1 && j === X - 1) {
return 1;
}
//ํ์์ง์ ์ด ์ด์ ์ ๋ฐฉ๋ฌธํ ๊ณณ์ผ ๊ฒฝ์ฐ ์ด๋ฏธ dp์ ๊ฐ์ด ์์
if (dp[i][j] !== -1) {
return dp[i][j];
}
let count = 0;
for (let d = 0; d < 4; d++) {
const nextY = i + dir[d][0];
const nextX = j + dir[d][1];
//ํ์ฌ ์ง์ ์ ์ํ์ข์ฐ ์ง์ ์ด ๋ฐฐ์ด์ ๋ฒ์์ ์ํด์๊ณ ๋ด๋ฆฌ๋ง๊ธธ์ด๋ผ๋ฉด
if (
nextX >= 0 &&
nextX < X &&
nextY >= 0 &&
nextY < Y &&
input[nextY][nextX] < input[i][j]
) {
count += DFS(nextY, nextX);
}
}
dp[i][j] = count;
return count;
};
console.log(DFS(0, 0));
๋ฐ์ด๋ ๊ธ์ด๋ค์, ๊ฐ์ฌํฉ๋๋ค.