최대 1 분 소요

[백준 5635번] 생일

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
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
 
public class 백준_손수경_정답_5635 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.valueOf(br.readLine());
        String[] name = new String[n];
        int[][] dates = new int[n][4];
        for (int i = 0; i < n; i++) {
            String temp = br.readLine();
            name[i] = temp.split(" ")[0];
            dates[i][0= i;
            dates[i][1= Integer.valueOf(temp.split(" ")[1]);
            dates[i][2= Integer.valueOf(temp.split(" ")[2]);
            dates[i][3= Integer.valueOf(temp.split(" ")[3]);
        }
 
        Arrays.sort(dates, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[3!= o2[3] ? o1[3- o2[3] : o1[2- o2[2]; 
            }
        });
        
        int oldIdx = dates[n - 1][0];
        int youngIdx = dates[0][0];
        bw.write(name[oldIdx] + "\n" + name[youngIdx]);
        bw.close();
    }
}
 
cs


풀이 방법

사람 이름은 String형이고, 생일은 Integer형이므로 각각 따로 받아주되 이름과 생일이 매칭되어야 하므로, 생일을 저장하는 배열인 dates의 각 행당 0번째 인덱스에는 그 사람의 고유 번호처럼 인덱스 값을 저장해주었다. 그런 다음 dates의 각 행당 3번째 인덱스가 년도 이므로 년도부터 비교를 해준다. 여기서 반환값이 양수이면 매개변수보다 현재 객체가 뒤쪽으로 이동, 0이면 현재 정렬 유지, -1이면 매개변수보다 현재 객체가 앞쪽으로 이동한다.

댓글남기기