
https://school.programmers.co.kr/learn/courses/30/lessons/42746#

function solution(numbers) {
var answer = '';
numbers.sort((a, b) => b - a);
numbers.sort((a, b) => String(a)[b.length-1] - String(b)[a.length-1]);
return answer;
}
// [9, 5, 34, 30, 3]
여기서 3이 30보다 앞에 오게 해야하는 알고리즘이 아무리 생각해도 생각나지 않았다.
다른 풀이를 읽어보니 수를 직접 비교하면서 풀었다. 예를 들어, '3'+'30' 과 '30+3' 이 어느 쪽이 더 큰지 비교해서 정렬한 것이다.
function solution(numbers) {
var answer = '';
numbers_ = numbers.map(String);
numbers_.sort((a, b) => (b+a) - (a+b))
answer = numbers_.join('');
return answer;
}
이 풀이를 보고 코드를 작성했고, 테스트 케이스 1개를 통과하지 못했다. 만약 모든 수가 0으로 구성되어 있다면 '000' 이 아닌 '0'으로 출력되어야 한다.
function solution(numbers) {
var answer = '';
numbers_ = numbers.map(String);
numbers_.sort((a, b) => (b+a) - (a+b))
if (numbers_[0] === '0') {
return '0';
}
answer = numbers_.join('');
return answer;
}
answer = numbers_.join('');