1) 문제
https://www.acmicpc.net/problem/5635
2) 접근 방법
그냥 Student 클래스 만들어서 name, day, month, year 필드 만들고
ArrayList<Student>
에다가 Student 정보들 넣고, 이를 정렬해서 출력해주면 된다.
근데 자바에서 정렬하는 게 자동완성 끄고 하니까 더 헷갈려서,, 이번에 제대로 정리를 해보려고 한다.
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
if (s1.year == s2.year) {
if (s1.month == s2.month) {
return Integer.compare(s1.day, s2.day);
} else {
return Integer.compare(s1.month, s2.month);
}
}
return Integer.compare(s1.year, s2.year);
}
});
new Comparator<Student>() {
}
이런 형식으로 만들고,
@Override
해서 compare(Object o1, Object o2)
를 구현해주면 되는데,
여기에서 Integer.compare(o1.???, o2.???)
를 해주면 알아서 오름차순으로 정렬되게 된다!
3) 코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
ArrayList<Student> list = new ArrayList<Student>();
for (int t = 0; t < n; t++) {
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());
list.add(new Student(name, day, month, year));
}
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
if (s1.year == s2.year) {
if (s1.month == s2.month) {
return Integer.compare(s1.day, s2.day);
} else {
return Integer.compare(s1.month, s2.month);
}
}
return Integer.compare(s1.year, s2.year);
}
});
System.out.println(list.get(list.size() - 1).getName());
System.out.println(list.get(0).getName());
}
}
class 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;
}
public String getName() {
return this.name;
}
}