백준 풀이/자바(Java)

백준 1431 자바 - 시리얼 번호

콘스_ 2024. 8. 4. 11:32
// 시리얼 번호
package Silver_III_3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;

public class Ex1431 {
    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, new Comparator<String>() {
            public int compare(String s1, String s2) {
                if (s1.length() == s2.length()) { // 길이가 같을 경우
                    int sum1 = numSum(s1);
                    int sum2 = numSum(s2);
                    if (sum1 == sum2) { // 3번의 경우
                        return s1.compareTo(s2);
                    } else { // 2번의 경우
                        return sum1 - sum2;
                    }
                }
                else {  // 1번의 경우
                    return s1.length() - s2.length();
                }
            }
        });

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            sb.append(arr[i]).append("\n");
        }

        System.out.print(sb);
    }

    static int numSum(String s) {
        int sum = 0;
        for (int i = 0; i < s.length(); i++) {
            if (Character.isDigit(s.charAt(i))) {
                sum += Integer.parseInt(String.valueOf(s.charAt(i)));
            }
        }
        return sum;
    }
}