우선, 자바스크립트의 sort에 대해서 다시 알아봐야한다.
JS의 sort함수는 기본적으로 배열을 String 타입으로 간주하고 비교하기 때문에 [b, c, a] 라는 곳에 sort()를 해주면 자동으로 [a, b, c]가 나오지만
숫자도 마찬 가지로 [90, 110, 100] 이와 같은 경우에서 "90"과 "100"을 비교시 앞자리 9와 1을 비교한 후 100보다 90이 크다는 결론을 내려버림
그래서 우리는 (a, b) => a-b 라는 함수에서 a-b가 양수가 나온다면 교체하고 음수가 나온다면 교체하지 않는다. (여기에서 a, b는 양옆에 붙어있는 수 일 수도, 아닐 수도 있다고 한다.)
이번 문제는 (b+a) - (a+b) 라는 방법을 통해서 숫자의 연결을 비교해서 정렬을 해줌
sort((a,b) => (b+a)-(a+b)) = 문자로 변환된 숫자를 연결하여 비교정렬
( '3', '30' => ('303')-('330'))
numbers.map(c=> c + '') 나는 이렇게 명시적으로 형변환을 한 것이 아니라
numbers.join().split(',')을 통해 형변환을 해줬는데 결과의 생김새는 같아도 TC의 7번째를 통과하지 못하는 일이 발생..
function solution(numbers) {
// answer의 각 값들을 문자열로 바꿔준 뒤 둘의 덧셈을 통해 비교
// 문자열로 변형하지 않으면 숫자들끼리의 연산이 되므로 원하는 값이 나오지 안흔ㄴ다.
let answer = numbers.map(c=> c + '').
sort((a,b) => +(b+a) - +(a+b)).join('');
return answer[0]==='0'? '0' : answer;
// 이건 원래 내 답..
// return numbers[0] === 0 ? '0' : numbers.join().split(',').sort((a,b) => (b+a) - (a+b)).join('');
}