(출처 : https://www.acmicpc.net/problem/1431)
if(o1.length()<o2.length()) return -1; //길이가 짧은 순
else if(o1.length()>o2.length()) return 1;
else { //길이가 같다면
}
이런식으로 썼는데 이렇게 하면 분기를 3번으로 나눠야 하는데
if(o1.length()==o2.length())
else{
}
이렇게 하면 if-else문 하나로 케이스를 나눌 수 있어서 좋은 것 같다.
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ArrayList<String> arr = new ArrayList<>();
for (int i = 0; i < n; i++) {
arr.add(sc.next());
}
Collections.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1.length()<o2.length()) return -1; //길이가 짧은 순
else if(o1.length()>o2.length()) return 1;
else { //길이가 같다면
int sum1 = 0;
int sum2 = 0;
for(int i=0;i<o1.length();i++) {
if(o1.charAt(i)>='0' && o1.charAt(i)<='9')sum1+=(o1.charAt(i)-'0');
if(o2.charAt(i)>='0' && o2.charAt(i)<='9')sum2+=(o2.charAt(i)-'0');
}
if(sum1==sum2)return o1.compareTo(o2);
else {
return Integer.compare(sum1, sum2);
}
}
}
});
for(String i : arr)System.out.println(i);
}