https://www.acmicpc.net/problem/5635
1. 아이디어
학생을 클래스로 만들고 Comparator 인터페이스를 구현하면 학생의 생일로 정렬할 수 있다.
2. 문제풀이
연도를 먼저 비교하고 이후 월, 이후 일을 비교하면 나이순으로 정렬할 수 있다. 학생 클래스에서 compareTo 메서드로 구현한 후 학생 배열을 정렬하면 배열의 가장 앞과 가장 뒤에 나이가 가장 적은 사람과 나이가 가장 많은 사람이 오게 된다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
private static class Student implements Comparable<Student> {
String name;
int day;
int month;
int year;
public Student(String name, int day, int month, int year) {
this.name = name;
this.day = day;
this.month = month;
this.year = year;
}
@Override
public int compareTo(Student o) {
if (this.year != o.year) return Integer.compare(this.year, o.year);
if (this.month != o.month) return Integer.compare(this.month, o.month);
return Integer.compare(this.day, o.day);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
Student[] students = new Student[N];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
String name = st.nextToken();
int day = Integer.parseInt(st.nextToken());
int month = Integer.parseInt(st.nextToken());
int year = Integer.parseInt(st.nextToken());
students[i] = new Student(name, day, month, year);
}
Arrays.sort(students);
sb.append(students[N - 1].name).append("\n").append(students[0].name);
bw.write(sb.toString());
bw.flush();
}
}
4. 후기
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 2999번 - 비밀 이메일 [Java] (0) | 2025.01.14 |
---|---|
[백준] 28702번 - FizzBuzz [Java] (0) | 2025.01.14 |
[백준] 11098번 - 첼시를 도와줘! [Java] (0) | 2025.01.14 |
[백준] 6996번 - 애너그램 [Java] (0) | 2025.01.14 |
[백준] 11944번 - NN [Java] (0) | 2025.01.14 |