Comparable 정렬
- 기본적인 정렬 기준
- compareTo 메소드를 정의한다.
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
public class BOJ_10814 {
static class Person implements **Comparable<Person>**{
int age;
String name;
int idx;
public Person(int age, String name, int idx) {
this.age = age;
this.name = name;
this.idx = idx;
}
/* 나이 어린 순, idx 작은 순 */
@Override
public int compareTo(Person o) {
if(this.age > o.age) {
return 1;
} else if(this.age == o.age) {
if(this.idx > o.idx) {
return 1;
}
}
return -1;
}
@Override
public String toString() {
return age+" "+name;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
PriorityQueue<Person> pq = new PriorityQueue<>();
int N = scan.nextInt();
for(int i = 0; i<N;i++) {
int age = scan.nextInt();
String name = scan.next();
pq.add(new Person(age,name,i));
}
while(!pq.isEmpty()) {
System.out.println(pq.poll());
}
}
}
Comparator
public class Main {
static class Person{
int num;
int age;
String name;
public Person(int num, int age, String name) {
this.num = num;
this.age = age;
this.name = name;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
Person arr[] = new Person[N];
for(int i = 0; i<N;i++) {
arr[i] = new Person(i,scan.nextInt(),scan.next());
}
Arrays.sort(arr,new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
if(o1.age==o2.age) {
return o1.num - o2.num;
}
else {
return o1.age - o2.age;
}
}
});
for(int i = 0; i<N;i++) {
System.out.printf("%d %s\n",arr[i].age,arr[i].name);
}
}
}