0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어진다. 해당 배열의 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해라
Input: [6, 10, 2]
Output: "6210"
Explanation: 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210
이 문제의 정렬조건은 두개의 값을 붙었을 때 어떤 숫자가 사전적으로 더 큰지를 봐야한다. 정렬 조건을 재정의 해줘야 한다. 숫자 자료형으로는 정렬을 할 수 없으니 숫자를 문자로 만들면 사전식 정렬 되므로 해당 정렬을 할 수 있다. 맨 앞이 0인 경우 예외처리를 해준다.
import java.util.*;
class Solution {
public String solution(int[] numbers) {
int len = numbers.length;
String[] strArray = new String[len];
for (int i = 0; i < len; i++) {
strArray[i] = String.valueOf(numbers[i]);
}
//내림차순으로
Arrays.sort(strArray, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return ((o2 + o1).compareTo(o1 + o2));
}
});
if(strArray[0].equals("0")) {
return "0";
}
StringBuilder answer = new StringBuilder();
for (String str : strArray) {
answer.append(str);
}
return answer.toString();
}
}
function solution(numbers) {
const str = numbers.map(number => String(number))
str.sort((a,b) => {
if(a+b < b+a) return 1;
if(a+b > b+a) return -1;
if(a === b) return 0;
else return -1;
} );
return str[0] == '0' ? '0' :str.join('');
}