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

JavaScript에서 숫자를 자릿수별 확장 형태로 반환하는 방법

문제 소개

이번 글에서는 하나의 숫자를 입력받아, 각 자릿수의 값을 명확히 보여주는 확장된 형태(expanded form)의 문자열을 반환하는 JavaScript 함수를 작성해 보겠습니다.

예를 들어 숫자 56577이 입력되면, 이를 만 단위부터 일의 자리까지 분해하여 다음과 같은 결과를 얻어야 합니다.

50000 + 6000 + 500 + 70 + 7

풀이 코드

다음은 위 문제를 해결하는 전체 코드입니다.

const num = 56577;

const expandedForm = (num = 0) => {
    const str = String(num);
    let res = '';
    let multiplier = Math.pow(10, str.length - 1);
    for(let i = 0; i < str.length; i++){
        const el = +str[i];
        const next = +str[i + 1];
        if(el){
            res += (el * multiplier);
        };
        if(next){
            res += ' + ';
        };
        multiplier /= 10;
    };
    return res;
};

console.log(expandedForm(num));

코드 동작 원리

코드가 어떤 방식으로 동작하는지 단계별로 살펴보겠습니다.

1. 숫자를 문자열로 변환

String(num)을 사용해 숫자를 문자열로 바꾸면, 각 자릿수에 인덱스로 접근할 수 있어 처리가 훨씬 간편해집니다.

2. 곱수(multiplier) 초기화

Math.pow(10, str.length - 1)로 가장 높은 자릿값(예: 5자리 숫자라면 10000)을 구합니다. 이 값은 반복문 안에서 매번 10으로 나누어 일의 자리까지 차례대로 줄어듭니다.

3. 각 자릿수 계산 및 연결

반복문 내부에서는 현재 자릿수 el과 그 다음 자릿수 next를 확인합니다. 현재 자릿수가 0이 아니라면 해당 자릿값(el * multiplier)을 결과 문자열에 추가하고, 다음 자릿수도 존재한다면 덧셈 기호 ' + '를 붙여 연결합니다. 덕분에 마지막 자릿수 뒤에는 불필요한 '+' 기호가 붙지 않습니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.

50000 + 6000 + 500 + 70 + 7

이처럼 문자열 변환과 자릿값 곱셈만으로도 복잡한 수학적 처리 없이 손쉽게 숫자를 확장 형태로 표현할 수 있습니다. 참고로 이 알고리즘은 시간 복잡도 O(n)(n은 자릿수)으로 매우 효율적이며, 중간에 0이 포함된 숫자(예: 50607)도 올바르게 처리됩니다.