[백준 5635번] 생일
[백준 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이면 매개변수보다 현재 객체가 앞쪽으로 이동한다.
댓글남기기