이번 글에서는 숫자를 입력받아 각 자릿수의 합을 구한 뒤, 그 합이 회문(Palindrome) 수인지 판별하는 JavaScript 함수를 작성해 보겠습니다. 함수는 합이 회문일 경우 true, 그렇지 않으면 false를 반환해야 합니다.
문제 이해하기
예를 들어 입력된 숫자가 697이라고 가정해 봅시다.
각 자릿수를 더하면 6 + 9 + 7 = 22가 됩니다. 22는 앞에서 읽어도 뒤에서 읽어도 같은 회문 수이므로, 함수는 697에 대해 true를 반환해야 합니다.
구현 아이디어
구현은 두 단계로 나눌 수 있습니다.
1단계 – 자릿수 합 구하기: 재귀 함수를 사용해 숫자를 10으로 나누어 가며 마지막 자릿수(num % 10)를 계속 더합니다. 숫자가 0이 되면 누적된 합을 반환합니다.
2단계 – 회문 여부 확인: 숫자를 문자열로 변환한 뒤 split(), reverse(), join()으로 뒤집고, 원래 값과 비교하여 같으면 회문입니다.
예제 코드
const num = 697;
// 자릿수의 합을 재귀적으로 계산하는 함수
const sumDigit = (num, sum = 0) => {
if(num){
return sumDigit(Math.floor(num / 10), sum + (num % 10));
};
return sum;
};
// 숫자가 회문인지 확인하는 함수
const isPalindrome = num => {
const revered = +String(num)
.split("")
.reverse()
.join("");
return revered === num;
};
// 자릿수의 합이 회문인지 최종 판별
const isSumPalindrome = num => isPalindrome(sumDigit(num));
console.log(isSumPalindrome(num));출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
true
코드 설명
sumDigit 함수는 재귀 호출을 통해 숫자의 모든 자릿수를 더합니다. Math.floor(num / 10)으로 마지막 자릿수를 제거하고, num % 10으로 추출한 자릿수를 누적합에 더하는 방식입니다.
isPalindrome 함수는 숫자를 문자열로 바꾼 후 배열로 분리하고, 순서를 뒤집어 다시 합친 값과 원래 값을 비교합니다. 두 값이 일치하면 해당 숫자는 회문입니다.
마지막으로 isSumPalindrome 함수가 이 두 함수를 연결하여, 자릿수의 합이 회문인지 한 번에 판별해 줍니다.