처음에는 브루트포스로 가능한 모든 경우의 수로 조합하여 정렬하는 것을 생각했다.
그런데 중요한 제한 사항인 numbers의 길이가 100,000이기 때문에,
조합을 하면 100,000!
, 2.824229407 e+456573
라서 시간 초과가 난다.
따라서 이 방법은 적절하지 않아서, O(N)으로 끝낼 수 있는 방법을 고려해야한다.
그래서 어떤 게 더 큰 수 인지 알 수 있는 것으로 고려하면서 정렬할 때 그 순대로 하는 방식을 생각해보았다.
function solution(numbers) {
numbers.sort((a, b) => {
const AB = a.toString() + b.toString()
const BA = b.toString() + a.toString()
return parseInt(BA) - parseInt(AB)
})
if (numbers[0] === 0){
return '0'
}
return numbers.join('').toString()
}
'평균 시간: 56.822ms'
'평균 메모리: 37.260MB'
'최고 시간: 241ms'
'최저 시간: 0.06ms'
'최고 메모리: 45.1MB'
'최저 메모리: 33.5MB'
'시간 표준 편차: 22739.964'
'메모리 표준 편차: 93.594'