문제 정의
숫자 n을 인자로 받는 자바스크립트 함수를 작성해야 합니다. 이 함수는 0부터 세었을 때 n번째에 해당하는 회문(팰린드롬) 수를 반환해야 합니다.
예를 들어 첫 번째 회문은 0, 두 번째는 1, 열 번째는 9입니다. 10은 앞뒤가 같지 않아 회문이 아니므로, 열한 번째 회문은 11이 됩니다.
예제 코드
다음은 위 문제를 해결하는 코드입니다.
const num = 31;
const findNthPalindrome = (num = 1) => {
const isPalindrome = (num = 1) => {
const reverse = +String(num)
.split('')
.reverse()
.join('');
return reverse === num;
};
let count = 0;
let i = 0;
while(count < num){
if(isPalindrome(i)){
count++;
};
i++;
};
return i - 1;
};
console.log(findNthPalindrome(num));
출력 결과
콘솔 출력 결과는 다음과 같습니다.
212
코드 동작 원리
이 코드의 핵심은 두 가지 함수로 나눌 수 있습니다.
1. isPalindrome 함수: 숫자를 String()으로 문자열로 변환한 뒤, split('')으로 각 자릿수 배열로 만들고 reverse()로 뒤집은 후 다시 join('')으로 합칩니다. 뒤집힌 값과 원래 값이 같다면 회문으로 판단하여 true를 반환합니다.
2. findNthPalindrome 함수: 0부터 시작해 하나씩 숫자를 증가시키며(i++) 각 숫자가 회문인지 검사합니다. 회문을 발견할 때마다 count를 증가시키고, count가 목표인 num에 도달하면 반복문을 종료합니다. 마지막 반복에서 이미 i가 한 번 더 증가된 상태이므로 i - 1을 반환하여 정확한 n번째 회문 수를 구합니다.
이 예제에서는 31번째 회문 수인 212가 결과로 출력됩니다.