반응형
처음 접근했을 때는 모든 경우의 수를 구하거나 1의 자리를 기준으로 내림차순하고 이후에 두 번째 자리를 기준으로 재정렬하는 방법을 생각했으나 numbers의 길이가 100,000이하 이고 각 원소가 1000이기에 어떻게 풀지 고민하고 있다고 다른 해설을 참조하게 되었다.
1. numbers의 각 원소를 문자로 변경한 배열을 정렬한다.
2. 정렬은 문자 b + 문자 a를 합치고 숫자형으로 바꿔준 값과 문자 a + 문자 b를 합치고 숫자형으로 바꿔서 빼준다.
여기서 마이너스 값이면 a는 앞으로 플러스 값이면 뒤로 간다.
a가 6 이고 b가 10이라고 했을 때 610과 106 중에 610이 크기 때문에 a가 앞으로 이동한다.
3. numbers의 원소는 0이상으로 나와 있기 때문에 최악의 경우 numbers는 [0,0,0,...,0]으로 채워질 수 있다. 따라서 내림차순으로 정렬된 answer에서 제일 처음 값이 0이라면 전체가 0이기 때문에 0만 return한다. 아닐경우 배열을 string으로 합친다.
function solution(numbers) {
var answer = numbers.map(v=>v.toString()).sort((a,b) => Number(b+a) - Number(a+b))
answer = answer[0] =='0' ? '0' : answer.join('');
return answer;
}