0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
function solution(numbers) {
let result =''
// 30 3 이있을때 크기로만 단순히 정렬후 조합하면 경우 '30' + '3' => '303'이 나오기때문에 '330'보다 작아지게된다.
// 따라서 모두 네자리숫자를 만들어서 비교한다, 이때 4자리 수를 만들기위해 뒤로 첫번째 숫자를 반복시킨다. 30 => 3033, 3 => 3333
const compare = (a,b) => {// 제한사항에 숫자는 1000 이하라는 조건이있어 모든 숫자를 4자리를 만들어 비교한다.
if(String(a).padEnd(4,String(a)) > String(b).padEnd(4,String(b))) return -1
if(String(a).padEnd(4,String(a)) < String(b).padEnd(4,String(b))) return 1
return 0
}
numbers.sort((a,b)=>compare(a,b))
result = numbers.join('') //모든 수를 붙인다.
return result[0]=== '0' ? '0' : result // 첫글짜가 '0'인 경우란, '0000' 이런 경우를 말한다.
function solution(numbers) {
let result =''
numbers = numbers.map(number => String(number))
numbers.sort((a,b)=> b + a - ( a + b )) // 타입이 string으로 변경되었기때문에 이런식으로 정렬을 진행할 수 있다.
result = numbers.join('')
return result[0]=== '0' ? '0' : result
result를 return 할때 '0' 일 경우를 생각해내지 못해 테스트 케이스 하나가 통과되지않아 시간이 오래걸렸다.
return result[0]=== '0' ? '0' : result