Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트로 숫자의 덧셈 지속성(Additive Persistence) 구하기

이번 글에서는 양의 정수를 입력받아 그 수의 덧셈 지속성(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입니다.