https://programmers.co.kr/learn/courses/30/lessons/42746
// 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
// 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
// 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
// numbers의 길이는 1 이상 100,000 이하입니다.
// numbers의 원소는 0 이상 1,000 이하입니다.
// 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
// [6, 10, 2] -> "6210"
// [3, 30, 34, 5, 9] -> "9534330"
// 숫자배열 인풋 숫자로 이루어진 문자열 아웃풋
// 내림차순 정렬을 했을 때
// 6, 10, 2 => 10, 6, 2 가 된다
// 일의 자리숫자 중 큰수가 가장 앞으로 와야 한다
// 두번 째 예에서
// ! 3 vs 30 vs 34 => 34, 3, 30
// 이 규칙을 적용하는 것이 관건..
// 첫번째와 두번째를 더한 값이 큰 것으로 더한다?
// [ 9, 5, 34, 30, 3 ]
// 95 > 59 : [9]
// 534 > 345 : [9,5]
// 3430 > 3034 : [9,5,34]
// 303 < 330 : [9,5,34,3,30]
function solution(numbers) {
var answer = "";
numbers.sort().reverse();
let newNum = [];
let stringNum = numbers.join("");
for (let i = 0; numbers.length; i++) {
if (stringNum[i] + stringNum[i + 1] > stringNum[i + 1] + stringNum[i]) {
newNum.push(stringNum[i]);
} else newNum.push(stringNum[i + 1]);
}
return answer;
}
// 시간초과
function solution(numbers) {
function solution(numbers) {
var answer = numbers
.map((a) => a.toString())
.sort((a, b) => (b + a) - (a + b))
.join("");
return answer[0] === "0" ? "0" : answer;
}
}
// 문자로 바꿔서 sort()를 사용하면 간단한 것...
// sort의 사용법이 정말 간단하면서도 무궁무진하구나?