import java.util.*;
class Solution {
// 앞자리가 가장 큰 수가 앞으로 오도록 정렬
public String solution(int[] numbers) {
ArrayList<String> arr = new ArrayList<>();
for(int n: numbers)
arr.add(Integer.toString(n));
Collections.sort(arr, new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
for(int i = 0; i < 3; i++) {
if (o1.charAt(i) == o2.charAt(i)) {
if (o1.length() == i + 1) {
if (o2.length() == i + 1) {
return 0; // 같은 숫자이면서, 자릿수가 같은 경우
} else {
for(int t = i + 1; t < o2.length(); t++) {
if (o2.charAt(t) > o1.charAt(i))
return 1;
else if (o2.charAt(t) < o1.charAt(i))
return -1; // o1이 더 크다..!
}
return 0;
}
} else if (o2.length() == i + 1) {
for(int t = i + 1; t < o1.length(); t++) {
if (o1.charAt(t) > o2.charAt(i))
return -1;
else if (o1.charAt(t) < o2.charAt(i))
return 1; // o1이 더 크다..!
}
return 0;
}
} else
return o2.compareTo(o1);
}
return o2.compareTo(o1);
}
});
return String.join("", arr);
}
}
자릿수마다 비교하는 식으로 했다.
백 단위 수와 일 단위 수는 다음과 같이 했다.
예)
334 3
라고 풀었는데..!
엄청나게 간단하면서도 똑똑한 풀이를 봐버렸다..
import java.util.*;
class Solution {
// 앞자리가 가장 큰 수가 앞으로 오도록 정렬
public String solution(int[] numbers) {
ArrayList<String> arr = new ArrayList<>();
for(int n: numbers)
arr.add(Integer.toString(n));
Collections.sort(arr, (a, b) -> (b + a).compareTo(a + b));
if (arr.get(0).startsWith("0")) return "0";
return String.join("", arr);
}
}
0에 대해 처리하고, 람다식까지 이용해서 앞 + 뒤, 뒤 + 앞 으로 연산해본 결과 중 큰 값을 return하도록 했다.