whatisthis?

[프로그래머스] 정수 내림차순으로 배치하기 - JavaScript 본문

ALGORITHM/PROGRAMMERS

[프로그래머스] 정수 내림차순으로 배치하기 - JavaScript

thisisyjin 2022. 7. 6. 17:06

javascript

문제 설명

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한 조건

  • n은 1이상 8000000000 이하인 자연수입니다.

예시

입출력 예

n        return
118372    873211

내가 작성한 코드

function solution(n) {
    const arr = Array.from(String(n)).sort();
    const rev = arr.reverse();

    return Number(rev.join(''));
}

우선 문자열로 바꾼 n을 Array.from을 이용하여 배열로 만들고, sort로 오름차순 정렬한다.
(참고로, 한자리 숫자이므로 문자열처럼 사전식 정렬 해도 크기순으로 정렬된다.)

오름차순 배열한 것을 reverse() 메서드로 뒤집은 후, join('')으로 합친 것을 리턴한다.

실행 결과

테스트 1 〉    통과 (0.06ms, 30.2MB)
테스트 2 〉    통과 (0.05ms, 30MB)
테스트 3 〉    통과 (0.11ms, 30.1MB)
테스트 4 〉    통과 (0.04ms, 30.1MB)
테스트 5 〉    통과 (0.04ms, 30.1MB)
테스트 6 〉    통과 (0.04ms, 30.2MB)
테스트 7 〉    통과 (0.07ms, 30MB)
테스트 8 〉    통과 (0.04ms, 30.1MB)
테스트 9 〉    통과 (0.05ms, 30MB)
테스트 10 〉    통과 (0.04ms, 29.9MB)
테스트 11 〉    통과 (0.07ms, 30.2MB)
테스트 12 〉    통과 (0.04ms, 30MB)
테스트 13 〉    통과 (0.04ms, 30.1MB)
테스트 14 〉    통과 (0.06ms, 30.1MB)
테스트 15 〉    통과 (0.04ms, 30.1MB)
테스트 16 〉    통과 (0.04ms, 29.6MB)

리팩토링

function solution(n) {
    const arr = Array.from(String(n)).sort((x, y) => y - x);
    // const arr = String(n).split('').sort((x, y) => y - x);

    return Number(arr.join(''));
}

실행 결과

테스트 1 〉    통과 (0.05ms, 30.1MB)
테스트 2 〉    통과 (0.05ms, 30.1MB)
테스트 3 〉    통과 (0.08ms, 30.1MB)
테스트 4 〉    통과 (0.05ms, 30.2MB)
테스트 5 〉    통과 (0.05ms, 30.1MB)
테스트 6 〉    통과 (0.05ms, 30MB)
테스트 7 〉    통과 (0.05ms, 30.2MB)
테스트 8 〉    통과 (0.05ms, 30MB)
테스트 9 〉    통과 (0.07ms, 29.9MB)
테스트 10 〉    통과 (0.05ms, 30MB)
테스트 11 〉    통과 (0.05ms, 30.1MB)
테스트 12 〉    통과 (0.05ms, 29.9MB)
테스트 13 〉    통과 (0.05ms, 30.1MB)
테스트 14 〉    통과 (0.05ms, 30.2MB)
테스트 15 〉    통과 (0.14ms, 30.1MB)
테스트 16 〉    통과 (0.05ms, 30.4MB)

성능이 개선되었다.
테스트 15에서는 오히려 String(n).split('')이 성능이 더 좋았다.