풀이방법
사용된 것:
Comparator 오버라이딩
2022.03.05
문제에서 제시하는 기준에 맞게 정렬하는 Comparator를 정의하여 사용해주면 된다.
이 때, str1.compareTo(str2);를 사용하였는데,
이 함수는 str1이 사전순으로 str2보다 앞설 때는 음수를, 그렇지 않을 때는 양수를 리턴한다.
코드
Java(2022.03.05)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
public class Main {
static int n; //기타 개수
static String[] serials; //시리얼번호들의 배열
static StringBuilder sb;
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
Comparator<String> cp = new Comparator<String>() {
@Override
public int compare(String str1, String str2) {
// TODO Auto-generated method stub
if(str1.length()<str2.length()) return -1;
else if(str1.length() == str2.length()) {
if(add(str1) < add(str2)) return -1;
else if(add(str1) == add(str2)) {
return str1.compareTo(str2);
}
else return 1;
}
else return 1;
}
};
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
serials = new String[n];
for(int i = 0; i<n; i++) {
serials[i] = br.readLine();
}
Arrays.sort(serials, cp);
sb = new StringBuilder();
for(int i = 0; i<n; i++) {
sb.append(serials[i] + System.lineSeparator());
}
System.out.print(sb);
}
static int add(String str) {
int sum = 0;
for(int i = 0; i<str.length(); i++) {
char c = str.charAt(i);
if(c>= '0' && c <= '9') {
sum += c-'0';
}
}
return sum;
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
#3273 : 두 수의 합 (0) | 2022.03.05 |
---|---|
#2003 : 수들의 합 2 (0) | 2022.03.05 |
#3190 : 뱀 (0) | 2022.03.02 |
#2607 : 비슷한 단어 (0) | 2022.03.02 |
#9012 : 괄호 (0) | 2022.03.02 |