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

JavaScript로 숫자 자릿수 재배열하기 — 가장 큰 수 만드는 방법

문제 소개

이번 글에서는 세 자리 양의 정수 하나를 입력받아, 그 숫자의 자릿수들을 재배열하여 만들 수 있는 가장 큰 수를 반환하는 JavaScript 함수를 작성해 보겠습니다.

예를 들어 149가 입력되면, 자릿수 1, 4, 9 중에서 가장 큰 조합인 941을 결과로 반환해야 합니다.

해결 아이디어

핵심 로직은 간단합니다. 숫자를 문자열로 변환한 뒤 각 자릿수를 배열 요소로 분리하고, 내림차순으로 정렬한 후 다시 하나의 숫자로 합치면 됩니다. 또한 입력값이 실제로 세 자리 수(100~999)인지 검증하여, 그렇지 않으면 null을 반환하도록 처리합니다.

코드 구현

const num = 149;

const maxRedigit = function(num) {
    // 세 자리 수가 아니면 null 반환
    if(num < 100 || num > 999)
        return null;

    return +num
        .toString()        // 숫자 → 문자열 변환
        .split('')         // 한 글자씩 배열로 분리
        .sort((a, b) => b - a)  // 내림차순 정렬
        .join('');         // 다시 하나의 문자열로 결합
};

console.log(maxRedigit(num));

실행 결과

941

코드 동작 원리 상세 설명

각 단계가 어떻게 동작하는지 살펴보겠습니다.

1. 유효성 검사

if(num < 100 || num > 999) 조건을 통해 입력값이 100 미만이거나 999 초과일 경우 null을 반환합니다. 이렇게 하면 두 자리 수나 네 자리 수처럼 잘못된 입력을 사전에 걸러낼 수 있습니다.

2. 문자열 변환과 분리

toString()은 숫자를 문자열로 바꾸고, split('')은 빈 문자열을 기준으로 각 자릿수를 개별 요소로 나눕니다. 예를 들어 149는 ['1', '4', '9'] 배열이 됩니다.

3. 내림차순 정렬

sort((a, b) => b - a)는 비교 함수를 사용해 큰 값부터 작은 값 순서로 정렬합니다. 결과적으로 ['9', '4', '1']이 됩니다.

4. 결합과 숫자 변환

join('')으로 배열을 '941'이라는 문자열로 합친 뒤, 맨 앞의 단항 더하기 연산자(+)가 이를 다시 숫자 941로 변환합니다.

마무리

이처럼 JavaScript의 내장 메서드 체이닝만 활용하면 별도의 반복문 없이도 짧고 깔끔하게 문제를 해결할 수 있습니다. 자릿수 조합 문제는 코딩 테스트에서 자주 등장하는 유형이므로, 위 패턴을 익혀두면 다양한 변형 문제에도 응용할 수 있습니다.