문제 정의
숫자 num을 첫 번째이자 유일한 인수로 받는 JavaScript 함수를 작성해야 합니다.
이 함수는 num의 각 자릿수를 모두 더한 값이 회문(팰린드롬) 숫자라면 true를, 그렇지 않다면 false를 반환해야 합니다.
입력 예시
const num = 781296;
출력 예시
const output = true;
출력 설명
781296의 각 자릿수를 더하면 다음과 같습니다.
7 + 8 + 1 + 2 + 9 + 6 = 33
33은 앞에서 읽어도 뒤에서 읽어도 33으로 동일한 회문 숫자이므로, 결과는 true가 됩니다.
구현 코드
const num = 781296;
// 재귀적으로 각 자릿수의 합을 구하는 함수
const findSum = (num, sum = 0) => {
if (num) {
return findSum(Math.floor(num / 10), sum + (num % 10));
}
return sum;
};
// 자릿수 합이 회문인지 판별하는 함수
const palindromeDigitSum = (num = 1) => {
const sum = findSum(num);
const str = String(sum);
const arr = str.split('');
const reversed = arr.reverse();
const revNum = +arr.join('');
return revNum === sum;
};
console.log(palindromeDigitSum(num));실행 결과
true
코드 동작 원리
이 코드는 크게 두 단계로 나누어 동작합니다.
1단계: 자릿수 합 계산 (findSum)
findSum 함수는 재귀 호출을 활용해 자릿수의 합을 구합니다. num % 10으로 마지막 자릿수를 추출하고, Math.floor(num / 10)으로 이미 더한 자릿수를 제거한 뒤, num이 0이 될 때까지 반복합니다.
2단계: 회문 여부 판별 (palindromeDigitSum)
구한 합을 문자열로 변환한 후, split()으로 배열로 만들고 reverse()로 뒤집은 다음 다시 join()으로 합쳐 원래 값과 비교합니다. 두 값이 같다면 회문이므로 true를 반환합니다.
이처럼 재귀 함수와 문자열 조작만으로도 별도의 라이브러리 없이 간단하게 문제를 해결할 수 있습니다.