문제 소개
숫자 하나를 유일한 인수로 받아 처리하는 JavaScript 함수를 작성해야 합니다. 이 함수는 숫자의 모든 자릿수를 더한 뒤, 그 합이 한 자릿수가 될 때까지 같은 연산을 계속 반복해야 합니다.
예를 들어 다음과 같은 숫자가 주어졌다고 가정해 보겠습니다.
const num = 54564567;
함수는 아래와 같은 방식으로 자릿수를 반복해서 더합니다.
5+4+5+6+4+5+6+7 = 42
4+2 = 6
따라서 최종 출력값은 6입니다.
구현 방법
먼저 각 자릿수의 합을 구하는 재귀 함수 sumDigits를 정의합니다. 이 함수는 num % 10으로 마지막 자릿수를 추출해 누적합에 더하고, Math.floor(num / 10)으로 마지막 자릿수를 제거한 값으로 재귀 호출을 이어갑니다.
그다음 sumDestructively 함수에서는 합계가 두 자릿수 이상인 동안, 즉 9보다 큰 동안 sumDigits를 반복 호출하여 한 자릿수만 남을 때까지 과정을 되풀이합니다.
예제 코드
const num = 54564567;
const sumDigits = (num, sum = 0) => {
if(num){
return sumDigits(Math.floor(num / 10), sum + (num % 10));
};
return sum;
}
const sumDestructively = (num) => {
let sum = num; while(sum > 9){
sum = sumDigits(sum);
};
return sum;
}
console.log(sumDestructively(num));
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
6