알고리즘

백준 JS | 재귀의 귀재

3jun 2022. 12. 29. 22:40
출처 : 백준 온라인 저지 - 25501번: 재귀의 귀재

✅ Solution

const input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n');
input.shift();
let answer = '';

// 1. 주어진 문자열이 팰린드롬인지 확인하기 위한 isPalindrome 함수 생성
function isPalindrome(str, cur, cnt) {
  // 1-1. 팰린드롬 여부를 확인하기 위해서는 index의 역순에 위치한 문자열과 비교해야 하므로
  // 결과적으로 문자열의 절반까지만 확인을 하면 된다. => length 변수는 재귀함수를 실행될 마지막 index
  // 문자열이 홀수이면 중간에 숫자가 하나 비기 때문에 Math.floor 사용하여 소수점 버림
  const length = Math.floor(str.length / 2);
  if(cur >= length) {
    return answer += '1' + ' ' + cnt + '\n'
  } else {
    if(str[cur] === str[str.length - cur - 1]) isPalindrome(str, cur+1, cnt+1)
    else return answer += '0' + ' ' + cnt + '\n'
  }
}              

// 2. 주어진 입력 값 문자열을 순차적으로 isPalindrome 함수의 인자로 넣어서 팰린드롬 여부 판단
input.forEach(el => isPalindrome(el, 0, 1));
              
// 3. 2번 코드에서 팰린드롬 여부에 따른 결과값을 answer 변수에 string 형태로 추가했으므로 console로 출력
console.log(answer);

 

 난이도가 높은 문제는 아니지만 그동안 재귀 관련한 문제가 나와도 재귀로 해결풀지 못하고 반복문을 사용하여 억지로 풀어냈었는데, 처음으로 재귀를 활용하여 풀어내서 뿌듯했다. 

 하지만 블로그를 작성하면서 보니 선린인터넷고 2022년 알고리즘 경시대회 A번 문제인 것을 보니 다른 사람들에겐 훨씬 더 간단한 수준의 문제인 듯... 그래도 이전의 나보다 조금이나마 나아졌으니 DFS, BFS 도 이렇게 차근차근 익혀나갈 것이다.