https://www.acmicpc.net/problem/1431
[풀이]
- Comparator 인터페이스를 오버라이딩하여 정렬 조건을 문제에서 주어진 조건에 맞게 설정하면 된다.
- 정렬의 조건을 정의할 수 있는지 없는지를 판단하는 문제였다.
- 나의 경우에는 Comparator 인터페이스를 오버라이딩하여 사용하였지만, 다른 분들의 코드를 살펴보니, 다른 방법으로 푸신 분도 많았다.
- 합을 판단할 때는 변수를 선언해서 조건문에서 문자인지, 숫자인지 판단하여 더하도록 했다.
[코드]
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String[] arr = new String[N];
for (int i = 0; i < N; i++) {
arr[i] = sc.next();
}
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.length() == o2.length()) {
int sum1 = 0;
int sum2 = 0;
for (int i = 0; i < o1.length(); i++) {
if (o1.charAt(i) <= '9' && o1.charAt(i) >= '0') {
sum1 += Integer.parseInt(String.valueOf(o1.charAt(i)));
}
}
for (int i = 0; i < o2.length(); i++) {
if (o2.charAt(i) <= '9' && o2.charAt(i) >= '0') {
sum2 += Integer.parseInt(String.valueOf(o2.charAt(i)));
}
}
if (sum1 == sum2)
return o1.compareTo(o2);
else
return sum1 - sum2;
} else {
return o1.length() - o2.length();
}
}
});
for (int i = 0; i < N; i++) {
System.out.println(arr[i]);
}
}
}
'Algorithm > 백준' 카테고리의 다른 글
백준 2776번(Java) : 암기왕 (0) | 2021.08.27 |
---|---|
백준 11650번 : 좌표 정렬하기(Java) (0) | 2021.08.25 |
백준 1018번 : 체스판 다시 칠하기(Java) (0) | 2021.08.23 |
백준 1436번 : 영화감독 숌(Java) (0) | 2021.08.23 |
백준 1120번 : 문자열(Java) (0) | 2021.08.21 |