이번 글에서는 양의 정수를 하나 입력받아 해당 숫자의 가산 지속성(additive persistence)을 반환하는 JavaScript 함수를 작성해 보겠습니다.
가산 지속성(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 함수는 재귀 호출을 통해 숫자의 모든 자릿수를 더합니다. 숫자를 10으로 나눈 몫과 나머지를 활용해 마지막 자릿수를 하나씩 분리하며 합산하는 방식입니다.
persistence 함수는 먼저 Math.abs()를 사용해 음수 입력에도 대비한 뒤, 숫자가 두 자리 이상인 동안(num > 9) 자릿수 합으로 숫자를 교체하고 반복 횟수를 카운트합니다. 최종적으로 카운트된 값을 반환합니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
3