계단을 오르듯이

1431. 시리얼 번호 본문

알고리즘/백준_JAVA

1431. 시리얼 번호

happyAyun 2022. 1. 9. 13:17

 

시리얼 번호는 배열을 아는 것이 핵심!!!!! 이거면 끝이다.

 

* comparable vs compator

두 개의 방법을 적절한 곳에 적용하면 된다.

implements Comparable<> vs new Comparator<>()

compareTo(o1) vs compare(o1,o2) 의 차이를 나타내고 정렬에 대해 정리하며 완벽하게 구현할 수 있는지 알아보는 문제였다.

 

Comparator
Comparable

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package november.second;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
 
public class B_1431_시리얼번호 {
 
    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int N = Integer.parseInt(in.readLine());
        String[] arr = new String[N];
        for (int i = 0; i < N; i++) {
            arr[i] = in.readLine();
        }
 
        Arrays.sort(arr, new Comparator<String>() {
 
            @Override
            public int compare(String o1, String o2) {
                if (o1.length() == o2.length()) { // 길이가 안되면
                    // 2. 숫자만의 합으로
                    int len = o1.length(); // 길이가 같으므로
                    int sum1 = 0;
                    int sum2 = 0;
                    for (int i = 0; i < len; i++) {
                        int num = o1.charAt(i) - '0';
                        if (num >= 0 && num <= 9)
                            sum1 += num;
                        num = o2.charAt(i) - '0';
                        if (num >= 0 && num <= 9)
                            sum2 += num;
                    }
                    if (sum1 == sum2) { // 숫자의 합이 안되면
                        // 3. 사전순 (숫자 -> 알파벳)
                        return o1.compareTo(o2);
                    }
                    return Integer.compare(sum1, sum2); // 2. 숫자만의 합
                }
                return Integer.compare(o1.length(), o2.length()); // 1. 길이
            }
 
        });
 
        for (int i = 0; i < N; i++) {
            sb.append(arr[i] + "\n");
        }
        System.out.println(sb);
    }
}
cs

'알고리즘 > 백준_JAVA' 카테고리의 다른 글

2512. 예산  (0) 2022.01.10
1520. 내리막 길  (0) 2022.01.10
14502. 연구소  (0) 2022.01.09
2573. 빙산  (0) 2022.01.09
17135. 캐슬디펜스  (0) 2022.01.06