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

JavaScript로 숫자의 자릿수를 오름차순으로 정렬하는 방법

이번 글에서는 숫자 배열을 입력받아 각 숫자의 자릿수(digit)를 특정 순서, 여기서는 오름차순으로 재배열하는 JavaScript 함수를 작성해 보겠습니다.

문제 이해하기

예를 들어 다음과 같은 배열이 있다고 가정해 보겠습니다.

const arr = [543, 65, 343, 75, 567, 878, 87];

각 숫자의 자릿수를 오름차순으로 정렬하면 출력 결과는 다음과 같아야 합니다.

const output = [345, 56, 334, 57, 567, 788, 78];

해결 접근 방식

핵심 로직은 다음과 같습니다.

1. 숫자를 문자열로 변환한 뒤 한 글자씩 분리합니다.
2. 분리된 자릿수를 오름차순으로 정렬합니다.
3. 정렬된 자릿수를 다시 하나의 값으로 합쳐 반환합니다.
4. 배열의 모든 요소에 대해 위 과정을 반복합니다.

구현 코드

위 로직을 코드로 구현하면 다음과 같습니다.

const arr = [543, 65, 343, 75, 567, 878, 87];

// 개별 숫자의 자릿수를 오름차순으로 정렬하는 함수
const ascendNumber = num => {
    const numArr = String(num).split('').map(el => +el);
    numArr.sort((a, b) => a - b);
    return numArr.join('');
};

// 배열 전체에 적용하는 함수
const sortDigits = arr => {
    const res = [];
    for(let i = 0; i < arr.length; i++){
        res.push(ascendNumber(arr[i]));
    };
    return res;
};

console.log(sortDigits(arr));

코드 설명

ascendNumber 함수는 먼저 String(num).split('')을 통해 숫자를 자릿수 배열로 만들고, map(el => +el)로 각 요소를 숫자형으로 변환합니다. 이후 sort((a, b) => a - b)를 사용해 오름차순으로 정렬한 뒤, join('')으로 다시 하나의 값으로 합칩니다.

sortDigits 함수는 반복문을 통해 원본 배열의 각 요소에 ascendNumber를 적용하고 그 결과를 새로운 배열에 담아 반환합니다.

실행 결과

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

[
    '345', '56',
    '334', '57',
    '567', '788',
    '78'
]

출력값이 문자열로 표시되는데, 이는 join('')이 문자열을 반환하기 때문입니다. 만약 숫자 타입이 필요하다면 반환 시 Number()로 감싸주면 됩니다.