온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.
첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)
둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.
첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.
간단한 class 정렬문제입니다.
클래스형끼리 비교할 수 있는 Comparator<>를 구현해 해결합니다.
입력은 나이와 이름 순으로 입력이 되는데, 이번에는 해당 라인 전체를 입력받은 후 split() 함수를 이용해 parsing하였습니다.
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
public class BJ10814 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Customer> list = new ArrayList<>();
int num = sc.nextInt();
sc.nextLine();
for(int i = 0; i<num; i++){
list.add(new Customer(i, sc.nextLine()));
}
Comparator<Customer> c = new Comparator<Customer>() {
@Override
public int compare(Customer o1, Customer o2) {
if(o1.age == o2.age){
return o1.count - o2.count;
}
else{
return o1.age - o2.age;
}
}
};
list.sort(c);
for (Customer customer : list) {
System.out.println(customer.age + " " + customer.name);
}
}
static class Customer{
int count;
int age;
String name;
Customer(int count, String line){
this.count = count;
this.age = Integer.parseInt(line.split(" ")[0]);
this.name = line.split(" ")[1];
}
}
}