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

JavaScript에서 숫자의 자릿수를 계속 더해 한 자리 숫자로 만드는 방법

숫자를 하나 입력받아 각 자릿수의 합을 재귀적으로 계산하고, 그 결과가 한 자리 숫자(10 미만)가 될 때까지 반복하는 함수를 작성해야 합니다.

예시

findSum(12345) = 1+2+3+4+5 = 15 = 1+5 = 6

따라서 최종 출력 결과는 6이 되어야 합니다.

재귀를 활용한 구현

이제 findSum() 함수의 코드를 작성해 보겠습니다.

// using recursion
const findSum = (num) => {
    if(num < 10){
        return num;
    }
    const lastDigit = num % 10;
    const remainingNum = Math.floor(num / 10);
    return findSum(lastDigit + findSum(remainingNum));
}
console.log(findSum(2568));

코드 동작 원리

함수는 먼저 입력된 숫자가 10보다 작은지 확인합니다. 10보다 작다면 이미 한 자리 숫자이므로 그대로 반환하면 됩니다. 그렇지 않은 경우에는 나머지 연산자(%)를 사용해 마지막 자릿수를 추출하고, Math.floor()를 이용해 마지막 자릿수를 제외한 나머지 숫자를 구한 뒤 재귀적으로 함수를 호출합니다. 이 과정은 값이 10 미만이 될 때까지 반복되며, 최종적으로 한 자리 숫자가 반환됩니다.

따라서 위 코드의 실행 결과는 다음과 같습니다.

3

추가 팁: O(1) 시간 복잡도로 해결하기

이 문제는 수학에서 '디지털 루트(digital root)'라고 알려진 개념과 같습니다. 9로 나눈 나머지의 성질을 활용하면 재귀나 반복 없이 상수 시간에 답을 구할 수 있습니다.

const digitalRoot = (num) => {
    if (num === 0) return 0;
    return 1 + (num - 1) % 9;
}
console.log(digitalRoot(2568)); // 3

입력값이 매우 큰 경우에도 이 공식을 사용하면 성능 저하 없이 즉시 결과를 얻을 수 있습니다.