위 문제는 11650번 좌표 정렬하기 문제를 풀이한 경험이 있다면 쉽게 풀 수 있는 문제다. 좌표정렬하기 문제에서 "x"가 동일할 때 "y"값을 비교했던 것과 같이, 이번에는 나이가 동일한 경우 입력한 순번, 즉 입력된 데이터를 배열에 담는 순번을 변수에 담아서 비교하면 된다.
import java.util.*;
import java.io.*;
// 회원 정보를 저장하는 클래스
class Member {
int age;
String name;
int joinDate;
public Member(int age, String name, int joinDate) {
this.age = age;
this.name = name;
this.joinDate = joinDate;
}
@Override
public String toString() {
return age + " " + name;
}
}
public class Main {
public static void main(String[] args) throws Exception {
// BufferedReader와 BufferedWriter를 생성하여 입출력을 처리합니다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 회원 수를 입력받습니다.
int n = Integer.parseInt(br.readLine());
// 회원 정보를 저장할 Member 배열을 생성합니다.
Member[] members = new Member[n];
// 회원 정보를 입력받아 Member 객체를 생성하여 배열에 저장합니다.
for (int i = 0; i < n; i++) {
String[] input = br.readLine().split(" ");
int age = Integer.parseInt(input[0]);
String name = input[1];
members[i] = new Member(age, name, i);
}
// Arrays.sort 메소드를 이용하여 회원 정보를 나이순으로 정렬합니다.
// 나이가 같은 경우에는 가입일순으로 정렬합니다.
Arrays.sort(members, new Comparator<Member>() {
@Override
public int compare(Member o1, Member o2) {
if (o1.age == o2.age) {
return o1.joinDate - o2.joinDate;
} else {
return o1.age - o2.age;
}
}
});
// 회원 정보를 출력합니다.
for (Member member : members) {
bw.write(member + "\n");
}
// BufferedWriter를 닫아줍니다.
bw.flush();
bw.close();
br.close();
}
}