0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예
numbers: [3, 30, 34, 5, 9]
return: 9534330
문제의 요구사항에 따라 앞자리가 높은 것이 먼저 와야합니다. 만약 앞자리가 똑같더라도 다음 자리 수를 비교하여야 합니다.
또, 30과 3과 같은 수를 비교할 때, 303보다 330이 더 큰 수이기 때문에 3이 앞에 위치해야 합니다. 이를 통해 앞자리가 똑같고 자릿수가 다른 숫자가 있을때도 역시 구분해 줘야 함을 의미합니다.
sort함수를 사용합니다. mdn | sort()를 참고하여 작성하였습니다.(sort 계속헷갈림...ㅜ)
function solution(numbers) {
numbers = numbers.sort((a,b) => (b.toString() + a.toString()) - (a.toString() + b.toString())).join('');
// "000"같은 경우에 "0"를 return하기 위함
return numbers[0] === '0' ? "0" : numbers;
}
sort의 비교할 함수인 compareFunction(a, b)가 return 값이 0보다 큰 경우, b를 a보다 낮은 인덱스로 소트하는 것을 이용한 방법입니다.
추가로 '000' === 0은 false이지만 '000' == 0 은 true이다 ^^