신입 개발자에서 시니어 개발자가 되기까지

[백준 node js] 25501 재귀함수 Palindrome 본문

javascript/알고리즘

[백준 node js] 25501 재귀함수 Palindrome

Jin.K 2022. 9. 19. 22:58

문제

- 팰린드롬인지 확인하고, 재귀함수가 호출된 횟수 출력.
- 팰린드롬이란? 앞에서 읽었을 때와 뒤에서 읽었을 때가 같은 문자열

코드

- index를 조작하는 방법

const strings = require("fs")
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");
let result = "";
function recursion(string, startIdx, endIdx, count = 0) {
  count++;
  if (string[startIdx] !== string[endIdx]) {
    return `0 ${count}`;
  } else if (startIdx >= endIdx) {
    return `1 ${count}`;
  }
  return recursion(string, startIdx + 1, endIdx - 1, count);
}
function isPalindrome(string) {
  return `${recursion(string, 0, string.length - 1)}\n`;
}
function resultRecur(string) {
  result += isPalindrome(string);
}
for (let i = 1; i < strings.length; i++) {
  resultRecur(strings[i]);
}
console.log(result);

count에 기본값을 0을 주고, 호출될 때마다 +1이 되도록하고 마지막에 return count.

- slice로 string자체를 줄이는 법

    function recursion(string) {
      console.log(string);
      if (string.length <= 1) return true;
      if (string[0] !== string[string.length - 1]) return false;
      // const newString = string.substring(1);
      // return isPalindrome(newString.slice(0, newString.length - 1));
      return recursion(string.slice(1, -1));
    }
    const test = isPalindrome("amanaplanacanalpanama");
    console.log(test);