๐ŸŽฒ ๋ฐฑ์ค€ 10942๋ฒˆ ํŒฐ๋ฆฐ๋“œ๋กฌ?

Jeongeunยท2023๋…„ 8์›” 2์ผ
0

๋ฐฑ์ค€

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

๋ฐฑ์ค€ 10942๋ฒˆ

๐ŸŽจ ์ฐธ๊ณ 1
๐ŸŽจ ์ฐธ๊ณ 2

const fs = require('fs'); 
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const N = +input.shift();
//์น ํŒ์— ์ ์€ ์ˆ˜
const arr = input.shift().split(" ").map(Number);
const M = +input.shift();

//arr[s]~arr[e]๊ฐ€ ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋ฉด dp[s][e]์— 1์„ ์ €์žฅ, ์•„๋‹ˆ๋ฉด 0์„ ์ €์žฅ
const dp = Array.from(new Array(N), () => new Array(N).fill(-1));

//s~e๊ธธ์ด๊ฐ€ 1,2์ธ ๊ฒฝ์šฐ
for (let i = 0; i < N; i++) {
  //๊ธธ์ด๊ฐ€ 1์ธ ๊ฒฝ์šฐ(s,e๊ฐ€ ๊ฐ™์Œ) ๋ฌด์กฐ๊ฑด ํŒฐ๋ฆฐ๋“œ๋กฌ
  dp[i][i] = 1;
  //๊ธธ์ด๊ฐ€ 2์ธ ๊ฒฝ์šฐ ๋‘ ์ˆ˜๊ฐ€ ๊ฐ™์œผ๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋‹ค.
  if (arr[i] === arr[i + 1]) {
    dp[i][i + 1] = 1;
  } else {
    dp[i][i + 1] = 0;
  }
}

const palindrome = (s, e) => {
  //dp๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ
  if (dp[s][e] === -1) {
    //๋งจ ์ฒ˜์Œ๊ณผ ๋ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด s+1๋ถ€ํ„ฐ e-1 ํ™•์ธํ•˜๊ธฐ, ๋‹ค๋ฅด๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ์•„๋‹˜
    if (arr[s] === arr[e]) {
      dp[s][e] = palindrome(s + 1, e - 1);
    } else {
      dp[s][e] = 0;
    }
  }

  return dp[s][e];
};

//๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ
const result = [];

for (let i = 0; i < M; i++) {
  const [S, E] = input[i].split(" ").map(Number);

  result.push(palindrome(S - 1, E - 1));
}

console.log(result.join("\n"));

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