문제
https://www.acmicpc.net/problem/1431
풀이(12분)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 표준 입력으로부터 입력을 받음
int n = Integer.parseInt(br.readLine());
String[] arr = new String[n];
for(int i = 0; i < n; i++){
arr[i] = br.readLine();
}
// 음수면 순서가 변경됨
Arrays.sort(arr, (o1, o2) ->{
if(o1.length() != o2.length()){ // 길이가 다르다면
return o1.length() - o2.length(); // 길이가 긴 것이 뒤로
}
int o1Num = 0;
int o2Num = 0;
for(int i = 0; i < o1.length(); i++){ // 길이는 같은데 숫자의 합이 다른 경우
if(o1.charAt(i) >= '0' && o1.charAt(i) <= '9'){
o1Num += Integer.parseInt(o1.substring(i,i+1));
}
if(o2.charAt(i) >= '0' && o2.charAt(i) <= '9'){
o2Num += Integer.parseInt(o2.substring(i,i+1));
}
}
if(o1Num != o2Num){
return o1Num - o2Num;
}
for(int i = 0; i < o1.length(); i++){ // 길이도 같고 숫자의 합도 다른 경우
if(o1.charAt(i) != o2.charAt(i)){
return o1.charAt(i) - o2.charAt(i); // 문자 하나씩 비교해서 사전순 배열
}
}
return -1;
});
for(String s : arr){
System.out.println(s);
}
}
}
문제 풀이 전략
Arrays의 comparator 을 조작하여 풀기 쉬운 단순한 문제이다.
매번 헷갈리지만 하나만 기억하자. o1 - o2가 오름차순이다!!
즉, 양수가 반환되면 (o1, o2)에서 두개의 순서를 바꿀 것이고, 음수가 반환되면 그대로 유지된다!
'문제 풀이 > 백준' 카테고리의 다른 글
[백준] 2257번. 화학식량(JAVA) (0) | 2025.03.11 |
---|---|
[백준] 1099번. 알 수 없는 문장(JAVA) (0) | 2025.03.10 |
[백준] 4307번. 개미(JAVA) (0) | 2025.03.04 |
[백준] 3896번. 소수 사이 수열(JAVA) (0) | 2025.03.04 |
[백준] 2885번. 초콜릿 식사(JAVA) (0) | 2025.03.04 |