
이 문제는 compare메서드를 오버라이딩할 수 있느냐를 묻는 문제였다
입출력 예 [3, 30, 34, 5, 9] -->"9534330" 에서
3이 30보다 먼저 정렬되야 하는데, 이건 String[]배열의 기본 sort메서드로는 할 수 없는 정렬이었기 때문이었다
그래서, compare메서드를 오버라이딩해서 "330"이 "303"보다 크다는 것을 기준으로 줘야 한다
--> return (b+a).compare(a+b);
큰 수부터 정렬하기 때문에 b가 a보다 먼저 나왔다.
그래서, 답은 여기에.
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String[] strNumbers = new String[numbers.length];
for(int i = 0; i < numbers.length; i++) {
strNumbers[i] = String.valueOf(numbers[i]);
}
Arrays.sort(strNumbers, new Comparator<String>() {
@Override
public int compare(String a, String b) {
return (b + a).compareTo(a + b);
}
});
if (strNumbers[0].equals("0")) {
return "0";
}
StringBuilder answer = new StringBuilder();
for (String num : strNumbers) {
answer.append(num);
}
return answer.toString();
}
}