자바스크립트 코딩테스트 강좌, 내림차순으로 자릿수 정렬하기

문제 정의

다음 문제를 해결하세요. 주어진 정수를 내림차순으로 정렬하여 그 숫자들을 하나의 정수로 반환하는 함수를 구현해야 합니다. 예를 들어, 입력으로 42145가 주어진다면 54421을 반환해야 합니다.

입력

  • 하나의 정수 n (0 ≤ n ≤ 1,000,000,000)

출력

  • 내림차순으로 정렬된 정수

접근 방법

문제를 해결하기 위해 아래의 단계를 따릅니다:

  1. 주어진 정수를 문자열로 변환한다.
  2. 문자열을 배열로 변환하고, 각 자릿수를 배열에 담는다.
  3. 배열을 내림차순으로 정렬한다.
  4. 정렬된 배열을 다시 문자열로 합친 후, 정수로 변환하여 반환한다.

코드 구현

아래는 위의 접근 방법을 코드로 구현한 예제입니다:


function sortDigitsDescending(n) {
    // 1단계: 정수를 문자열로 변환
    const strNum = n.toString();
    
    // 2단계: 문자열을 배열로 변환
    const digitsArray = strNum.split('');
    
    // 3단계: 배열을 내림차순으로 정렬
    digitsArray.sort((a, b) => b - a);
    
    // 4단계: 정렬된 배열을 문자열로 합치고 정수로 변환
    const sortedNumber = parseInt(digitsArray.join(''), 10);
    
    return sortedNumber;
}

코드 설명

위의 코드는 아래와 같은 방식으로 작동합니다:

  • 함수 sortDigitsDescending(n)는 정수 n를 매개변수로 받습니다.
  • toString() 메서드를 사용하여 숫자를 문자열로 변환합니다.
  • split('') 메서드를 통해 문자열의 각 자릿수를 배열로 분리합니다.
  • sort() 메서드는 내림차순으로 배열의 요소를 정렬합니다. 자릿수로 문자열을 비교하기 위해 각각을 숫자로 변환하여 비교합니다.
  • join('') 메서드를 사용해 정렬된 배열을 다시 하나의 문자열로 합친 후, parseInt()를 통해 정수로 변환하여 반환합니다.

테스트 케이스

이제 작성한 함수를 다양한 테스트 케이스로 검증해볼 필요가 있습니다:


console.log(sortDigitsDescending(42145)); // 54421
console.log(sortDigitsDescending(123456789)); // 987654321
console.log(sortDigitsDescending(0)); // 0
console.log(sortDigitsDescending(10000)); // 10000
console.log(sortDigitsDescending(9876543210)); // 9876543210

성능 고려사항

이 알고리즘은 입력값 길이에 따라 O(n log n)의 시간복잡도를 가집니다. 여기서 n은 자릿수의 수입니다. 자릿수를 정렬하는 과정에서 JavaScript의 내부 정렬 알고리즘이 이용되는데, 이는 최악의 경우 O(n log n) 성능을 보장합니다.

결론

우리는 주어진 정수를 내림차순으로 자릿수 정렬하기 위한 알고리즘을 성공적으로 구현했습니다. 이 과정에서 자바스크립트의 문자열 및 배열 메서드를 활용하여 문제를 간단하고 효율적으로 해결할 수 있었습니다. 알고리즘 문제를 해결하는 과정에서 중요한 점은 문제를 세분화하여 접근하는 것과, 각 단계에서의 코드 작성을 명확히 하는 것입니다. 앞으로 다양한 알고리즘 문제를 해결하면서 이와 같은 접근 방법을 활용해 보세요.