0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
import java.util.stream.Collectors;
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public static String solution(int[] numbers) {
// Comparator를 사용하기 위해서 int배열을 String 배열로 만듬
String[] stringNumbers = Arrays.toString(numbers).split("[\\[\\]]")[1].split(", ");
// 가장 큰 수를 만들 수 있게 배열 sort
Arrays.sort(stringNumbers, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// 두 수의 길이가 같을 경우엔 크기 비교
if (o1.length() == o2.length()) return Integer.parseInt(o2) - Integer.parseInt(o1);
boolean lengthCheck = o1.length() > o2.length();
long maxCheck = 0;
o1 = new String(new char[3]).replace("\0", o1);
o2 = new String(new char[3]).replace("\0", o2);
String tmpNum = lengthCheck ? o1.substring(0, o2.length()) : o2.substring(0, o1.length());
if (lengthCheck) {
maxCheck = Long.parseLong(o2) - Long.parseLong(tmpNum);
} else {
maxCheck = Long.parseLong(tmpNum) - Long.parseLong(o1);
}
return maxCheck > 0 ? 1 : maxCheck == 0 ? 0 : -1;
}
});
return stringNumbers[0].equals("0") ? "0" : Arrays.stream(stringNumbers).collect(Collectors.joining());
}
}