๐ŸŽฒ ๋ฐฑ์ค€ 1520๋ฒˆ ๋‚ด๋ฆฌ๋ง‰๊ธธ

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

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
96/186

๋ฐฑ์ฃผ 1520๋ฒˆ

๐Ÿงธ ๋‹ต์„ ๋ณด๊ณ ๋„ ์ดํ•ดํ•˜๋Š”๋ฐ ๊ฝค๋‚˜ ๊ฑธ๋ ธ๋‹ค.. 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));

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

comment-user-thumbnail
2023๋…„ 7์›” 19์ผ

๋›ฐ์–ด๋‚œ ๊ธ€์ด๋„ค์š”, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ