https://www.acmicpc.net/problem/10814
package boj10814;
import java.io.*;
import java.util.*;
import java.lang.*;
public class Main {
public static void main(String []args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Member> arrayList = new ArrayList<>();
int n = Integer.parseInt(br.readLine());
// 회원 입력
while(n-->0){
StringTokenizer st = new StringTokenizer(br.readLine());
int age = Integer.parseInt(st.nextToken());
Member member = new Member(age, st.nextToken());
arrayList.add(member);
}
Collections.sort(arrayList);
for(int i = 0; i < arrayList.size(); i++){
System.out.println(arrayList.get(i).age+" "+arrayList.get(i).name);
}
}
}
class Member implements Comparable<Member>{
int age;
String name;
Member(int age, String name){
this.age = age;
this.name = name;
}
@Override
public int compareTo(Member o) {
return this.age - o.age;
}
}
Comparable<> vs Comparable<>
Comparable : 자기자신과 매개변수 객체를 비교 → lang import
CompareTo메소드를 Override해서 구현하여 비교 → CompareTo반드시 구현해야
자기자신과 상대방을 비교
@Override
public int compareTo(Student o) {
// 자기자신의 age가 o의 age보다 크다면 양수
if(this.age > o.age) {
return 1;
}
// 자기 자신의 age와 o의 age가 같다면 0
else if(this.age == o.age) {
return 0;
}
// 자기 자신의 age가 o의 age보다 작다면 음수
else {
return -1;
}
}
class Student implements Comparable<Student> {
int age; // 나이
int classNumber; // 학급
Student(int age, int classNumber) {
this.age = age;
this.classNumber = classNumber;
}
@Override
public int compareTo(Student o) {
/*
* 만약 자신의 age가 o의 age보다 크다면 양수가 반환 될 것이고,
* 같다면 0을, 작다면 음수를 반환할 것이다.
*/
return this.age - o.age;
}
}
// 내림차순
return -(this.age - o.age);
위와같이 간단하게 비교가능
Comparator : 두 매개변수 객체를 비교 → util import
@Override
public int compare(Student o1, Student o2) {
// o1의 학급이 o2의 학급보다 크다면 양수
if(o1.classNumber > o2.classNumber) {
return 1;
}
// o1의 학급이 o2의 학급과 같다면 0
else if(o1.classNumber == o2.classNumber) {
return 0;
}
// o1의 학급이 o2의 학급보다 작다면 음수
else {
return -1;
}
}
@Override
public int compare(Student o1, Student o2) {
/*
* 만약 o1의 classNumber가 o2의 classNumber보다 크다면 양수가 반환 될 것이고,
* 같다면 0을, 작다면 음수를 반환할 것이다.
*/
return o1.classNumber - o2.classNumber;
}
양수 : 자리 바뀜
음수, 0 : 그대로