재귀 함수란?
함수가 자기 자신을 다시 호출하는 함수.
재귀 함수의 장단점
- 장점: 코드가 간결해지고, 수학적으로 정의된 문제(피보나치 수열, 팩토리얼 등)를 직관적으로 구현할 수 있습니다.
- 단점: 호출 스택이 커질 수 있어 메모리를 많이 사용하고, 큰 입력에서는 성능이 떨어질 수 있습니다.
풀이
let fs = require("fs");
let input = fs.readFileSync('예제.txt').toString().trim().split("\n")
let N = input.shift()
let cnt = 0;
const recursion = (s,l,r) =>{
cnt += 1;
if(l >=r ){
return 1;
}else if(s[l] != s[r] ){
return 0;
} else {
return recursion (s, l +1 , r-1);
}
};
const isPalinderome =(s) =>{
return recursion(s,0,s.length -1);
}
for( i = 0; i <N; i++){
cnt = 0;
console.log(isPalinderome(input[i].trim()) ,cnt);
}
recursion(s, l, r): 재귀적으로 회문을 판별하는 함수로, 문자열 s의 l번째 문자와 r번째 문자를 비교합니다.
- cnt += 1: recursion이 호출될 때마다 cnt를 1씩 증가시킵니다.
- if (l >= r): 인덱스 l이 r보다 크거나 같으면(즉, 중앙에 도달하거나 비교할 문자가 더 이상 없으면) 회문이므로 1을 반환합니다.
- else if (s[l] !== s[r]): 양 끝 문자가 다르면 회문이 아니므로 0을 반환합니다.
- else: 양 끝 문자가 같으면, l을 1 증가시키고 r을 1 감소시켜 recursion을 다시 호출하여 가운데로 이동합니다.
isPalindrome(s): 주어진 문자열 s가 회문인지 확인하는 함수로, recursion(s, 0, s.length - 1)를 호출하여 회문 여부를 반환합니다.
for 반복문으로 테스트 케이스마다 cnt를 0으로 초기화하여 재귀 호출 횟수를 새로 셉니다.
isPalindrome(input[i].trim()): 각 테스트 케이스가 회문인지 확인하고, 결과(1 또는 0)와 cnt를 출력합니다.
'알고리즘' 카테고리의 다른 글
[BOJ] 4779 - 칸토어 집함(JS) (1) | 2024.11.19 |
---|---|
[BOJ]24060 - 병합 정렬1(JS) (0) | 2024.11.06 |
[BOJ] 20920 - 영단어 암기는 괴로워(JS) (0) | 2024.10.11 |
[BOJ] 2108 - 통계학 (JS) (1) | 2024.10.08 |
[BOJ] 26069 - 붙임성 좋은 총총이(JS) (0) | 2024.10.07 |