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

자바스크립트에서 숫자의 자릿수 합을 한 자리 수로 줄이는 2가지 방법

숫자를 입력받아 각 자릿수를 반복해서 더하고, 최종적으로 한 자리 숫자에 도달할 때까지 이 과정을 반복하는 JavaScript 함수를 작성하는 것이 목표입니다. 예를 들어 123456의 경우 1+2+3+4+5+6 = 21이 되고, 다시 2+1 = 3으로 수렴하게 됩니다.

이 문제는 아래의 두 가지 방법으로 해결할 수 있습니다.

방법 1: while 반복문 사용

이 방식은 while 반복문을 활용해 숫자의 각 자릿수를 계속 더하는 접근 방식입니다. 내부 반복문은 현재 숫자의 모든 자릿수를 하나씩 더하고, 외부 반복문은 그 결과가 한 자리 숫자가 될 때까지 전체 과정을 반복합니다.

예제 코드

const num = 123456;
const addDigits = (num = 1) => {
    let sum = num;
    while(sum % 10 !== sum){
        let sum1 = 0;
        while(sum > 0){
            sum1 += sum % 10;
            sum = Math.floor(sum / 10);
        }
        sum = sum1;
    };
    return sum;
};
console.log(addDigits(num));

방법 2: 상수 시간(O(1)) 솔루션 사용

이 방식은 수학의 합동 공식(Congruence Formula), 즉 디지털 루트(Digital Root) 공식을 활용합니다. 어떤 숫자의 자릿수 합을 반복했을 때의 최종 결과는 (num - 1) % 9 + 1과 같다는 성질을 이용하므로, 반복문 없이 단 한 번의 연산만으로 답을 구할 수 있습니다. 이 공식에 대해 더 깊이 이해하고 싶다면 관련 수학 개념을 추가로 학습해 보시기 바랍니다.

예제 코드

const num = 123456;
const addDigits = (num = 1) => {
    let predicate = (num - 1) % 9;
    return ++predicate;
};
console.log(addDigits(num));

실행 결과

두 방법 모두 콘솔에 동일한 결과를 출력합니다.

3

첫 번째 방법은 코드가 직관적이어서 로직을 이해하기 쉬운 반면, 입력값의 크기에 따라 연산 횟수가 늘어납니다. 반면 두 번째 방법은 시간 복잡도가 O(1)이므로 매우 큰 숫자가 입력되더라도 일정한 성능을 보장한다는 장점이 있습니다.