티스토리 뷰
Comparable
vs Compartor
🔶 java.lang.Comparable
> 정렬이 안되는 객체를 정렬 가능하게 한다. + 정렬 기준을 설정한다.
1. Comparable
은 기본형 정렬에 사용하지 않는다 → 정렬 기준이 없는 객체(Object)
를 정렬 가능하게 만들어주는 것이다.
2. Comparable
은 다른 타입끼리도 비교가 가능하다.
🔶 java.util.Comparator
> 기본 정렬 기준과 다르게 정의하고 싶을 때 사용한다.
외부 정렬 기준을 정의하는 것이다. 그래서 매개변수가 2개이다.
Comparble
+ 정의한 Object
import java.io.*;
import java.util.StringTokenizer;
import java.util.Arrays;
// 210327
// 1. Comparable
// - Comparable은 java.lang (기본) 패키지 안에 있어 import 없이 사용 가능하다.
// - Comparable은 정렬 기준이 없는 객체(Object)에 정렬 기준을 만들어 주는 것이다.
// - Comparable은 기본 자료형에 쓰지 않는다.
public class Main_BJ_11650_좌표정렬하기_Comparable {
static class Pos implements Comparable<Pos>{
int x, y;
public Pos(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int compareTo(Pos o) {
if(Integer.compare(this.x, o.x) == 0) {
return Integer.compare(this.y, o.y);
}
return Integer.compare(this.x, o.x);
}
}
public static void main(String[] args) throws Exception {;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int N = stoi(br.readLine());
Pos[] arr = new Pos[N];
int x, y;
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine(), " ");
x = stoi(st.nextToken());
y = stoi(st.nextToken());
arr[i] = new Pos(x, y);
}
Arrays.sort(arr);
// 출력
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++) {
sb.append(arr[i].x + " " + arr[i].y + "\n");
}
System.out.println(sb.toString());
br.close();
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}
Comparator
+ 기본 자료형 + 익명 내부 클래스
import java.io.*;
import java.util.StringTokenizer;
import java.util.Arrays;
import java.util.Comparator;;
// 210327
// 2. Comparator
// - Comparator는 java.util 패키지 안에 있는 '외부 정렬 기준'이다.
// - Comparator는 기본 정렬 기준과 다른 정렬 기준을 만들 때 사용한다.
public class Main_BJ_11650_좌표정렬하기_Comparator {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int N = stoi(br.readLine());
int[][] arr = new int[N][2];
int x, y;
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine(), " ");
x = stoi(st.nextToken());
y = stoi(st.nextToken());
arr[i][0] = x;
arr[i][1] = y;
}
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0]) {
return Integer.compare(o1[1], o2[1]);
}
return Integer.compare(o1[0], o2[0]);
}
});
// 출력
StringBuilder sb = new StringBuilder();
for(int i=0; i<N; i++) {
sb.append(arr[i][0] + " " + arr[i][1] + "\n");
}
System.out.println(sb.toString());
br.close();
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
[BJ] 1181. 단어 정렬 (0) | 2021.03.28 |
---|---|
[BJ] 11651. 좌표 정렬하기2 (0) | 2021.03.28 |
[BJ] 14502. 연구소 (0) | 2021.03.26 |
[BJ] 1600. 말이 되고픈 원숭이 (0) | 2021.03.24 |
[BJ] 1149. RGB 거리 (0) | 2021.03.23 |
댓글