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

JavaScript에서 숫자를 개별 자릿수 배열로 분할하는 방법

JavaScript에서 숫자(Number)를 입력받아 각 자릿수로 분할한 뒤, 그 숫자들을 배열로 만들어 반환하는 함수를 작성해야 하는 경우가 있습니다.

예를 들어, 입력값이 다음과 같다면 −

const num = 55678;

출력 결과는 다음과 같아야 합니다.

const output = [5, 5, 6, 7, 8];

제약 조건

이 문제의 핵심 조건은 숫자를 문자열(String)로 변환하지 않고, ES6의 문자열 관련 메서드도 사용하지 않고 해결해야 한다는 점입니다. 즉, 순수하게 수학적 연산만으로 자릿수를 분리해야 합니다.

해결 접근 방식

가장 효율적인 방법은 나눗셈과 나머지 연산을 활용하는 것입니다.

  • 나머지 연산자(%): num % 10을 계산하면 숫자의 마지막 자릿수를 얻을 수 있습니다.
  • Math.floor(): Math.floor(num / 10)을 실행하면 마지막 자릿수를 제거한 나머지 값이 됩니다.
  • 숫자가 0이 될 때까지 이 과정을 반복하면 모든 자릿수를 추출할 수 있습니다.

추출된 자릿수는 unshift()를 사용해 배열의 앞쪽에 삽입하므로, 최종적으로 원래 숫자와 같은 순서의 배열이 완성됩니다.

구현 코드

const num = 55678;
const numberToArray = (num) => {
    const res = [];
    while(num){
        const last = num % 10;
        res.unshift(last);
        num = Math.floor(num / 10);
    };
    return res;
};
console.log(numberToArray(num));

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

[ 5, 5, 6, 7, 8 ]

동작 원리 살펴보기

코드가 실행되는 과정을 단계별로 보면 다음과 같습니다.

  1. 1회전: 55678 % 10 = 8 → 배열 앞에 추가 → num은 5567
  2. 2회전: 5567 % 10 = 7 → 배열 앞에 추가 → num은 556
  3. 3회전: 556 % 10 = 6 → 배열 앞에 추가 → num은 55
  4. 4회전: 55 % 10 = 5 → 배열 앞에 추가 → num은 5
  5. 5회전: 5 % 10 = 5 → 배열 앞에 추가 → num은 0, 반복 종료

이처럼 이 알고리즘은 시간 복잡도 O(n)(n은 자릿수)으로 매우 효율적이며, 문자열 변환 없이 순수한 산술 연산만으로 문제를 해결합니다.