본문 바로가기

프로그래머스/JavaScript

[프로그래머스 JavaScript] Level2 가장 큰 수

비교하는 방법

정렬할 때,

두 수를 연결했을 때, 더 큰 수가 나오는 순서로 정렬을 한다.

[초기 코드]

function solution(numbers) {
    var answer = '';

    numbers = numbers.map(e => String(e));
    numbers.sort((a, b) => {
        if (a+b > b+a) {
            return -1;
        } else if (a+b < b+a) {
            return 1;
        }
    })

    numbers.map(e => answer += e);
    return answer;
}

function solution(numbers) {
    var answer = '';

    numbers = numbers.map(e => String(e));
    numbers.sort((a, b) => {
        if (a+b > b+a) {
            return -1;
        } else if (a+b < b+a) {
            return 1;
        }
    })

    numbers.map(e => answer += e);
    if (Number(answer) === 0) {
        answer = '0';
    }
    return answer;
}

 

 

ES6의 리터럴 방식으로 숫자를 연결하여 비교한 뒤,

join으로 연결해준다.

맨 앞에 숫자가 0인 경우는 숫자가 0밖에 없는 경우이다.

0이 한번일 수도, 여러 번 반복되어 있을 수도 있다.

test case로는 [0, 0, 0, 0, 0]의 답이 0이 되어야 하는데 00000이 아닌지 확인해본다.

 

[최종코드]

function solution(numbers) {
    var answer = '';
    
    answer = numbers.sort((a, b) => `${b}${a}` - `${a}${b}`).join('');    
    
    return answer[0] === '0' ? '0' : answer;    
}