이번 글에서는 양의 정수를 입력받아 그 수의 덧셈 지속성(additive persistence)을 반환하는 자바스크립트 함수를 작성해 보겠습니다.
덧셈 지속성이란?
어떤 정수 n의 덧셈 지속성이란, 각 자릿수의 합으로 숫자를 반복해서 대체했을 때, 그 수가 한 자리 숫자가 될 때까지 필요한 반복 횟수를 의미합니다.
예시
숫자가 다음과 같다고 가정해 봅시다.
1679583
각 단계마다 자릿수의 합을 구하면 다음과 같습니다.
1 + 6 + 7 + 9 + 5 + 8 + 3 = 39 // 1단계 3 + 9 = 12 // 2단계 1 + 2 = 3 // 3단계
세 번의 반복 끝에 한 자리 숫자인 3에 도달하므로, 이 숫자의 덧셈 지속성은 3입니다.
구현 코드
먼저 재귀 호출을 활용해 각 자릿수의 합을 계산하는 보조 함수를 만들고, 이를 반복적으로 적용하여 지속성을 세는 방식으로 구현할 수 있습니다.
const num = 1679583;
// 각 자릿수의 합을 재귀적으로 계산하는 함수
const sumDigit = (num, sum = 0) => {
if(num){
return sumDigit(Math.floor(num / 10), sum + num % 10);
};
return sum;
};
// 덧셈 지속성을 계산하는 함수
const persistence = num => {
num = Math.abs(num);
let res = 0;
while(num > 9){
num = sumDigit(num);
res++;
};
return res;
};
console.log(persistence(num));코드 설명
- sumDigit 함수: 재귀적으로 마지막 자릿수(num % 10)를 더하고, 나머지 부분(Math.floor(num / 10))을 다시 처리합니다.
- persistence 함수: Math.abs()로 음수 입력도 안전하게 처리한 후, 숫자가 두 자리 이상(9보다 큰) 동안 자릿수의 합으로 대체하며 반복 횟수를 셉니다.
- 한 자리 숫자가 되면 while문이 종료되고 누적된 반복 횟수가 반환됩니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
3
즉, 1679583은 세 번의 자릿수 합산 과정을 거쳐 한 자리 숫자가 되므로 덧셈 지속성은 3입니다.