자바에서
Comparator와 Comparable은 서로
객체를 비교하기 위해서 사용을하는 것이다.
Comparable 은 CompareTo를 반환하는데 이거는 자기 자신과 상대방을 비교하는 것이다.
Comparator는 compare이라는 매서드가 있는데 이것은 두 객체끼리 비교를 하는 것이다.
Comparable과 Comparator 모두 원시타입 byte, char, double, short, long, int, float 는 적용이 안되고
Integer,String 과 같은 Wrapper 클래스만 적용이 가능하다.
Comparator의 compare 숫자와 문자열 정렬
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
// Integer 배열 선언
Integer[] int_arr = {100, 99, 80, 60 ,50, 101};
Arrays.sort(int_arr, new iComparator());
for (int i = 0; i < int_arr.length; i++)
System.out.print(int_arr[i]+ " ");
System.out.println();
// String 배열 선언
String[] s_arr = {"z", "a", "v", "s", "b", "m"};
Arrays.sort(s_arr, new sComparator());
for (int i = 0; i < s_arr.length; i++)
System.out.print(s_arr[i]+ " ");
System.out.println();
}
public static class iComparator implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
}
public static class sComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
}
}
보통 파라미터에서 앞에서 선언된 변수와 뒤에서 선언된 변수끼리 뺏을 경우 음수가 나온다.(아스키 코드라면)
그러면 이거는 오름차순으로 정리가 된다.
1181번
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
String []s=new String[n];
for(int i=0;i<n;i++){
s[i]=br.readLine();
}
Arrays.sort(s,new sComparator());
for(int i=1;i<s.length;i++){
if(!s[i-1]===(s[i])){
System.out.println(s[i]);
}
}
// Arrays.sort는 Wrapper Class 만 가능핟.
}
public static class sComparator implements Comparator<String>{
@Override
public int compare(String o1,String o2){
if(o1.length()==o2.length()){
return o1.compareTo(o2);
}
return o1.length()-o2.length();
}
}
}
11650 (클래스 배열을 통한 내부에서 정의가 가능하다. )
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
DOT[] d = new DOT[n];
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
d[i] = new DOT(x, y);
}
// 정렬: x 오름차순, 같으면 y 오름차순
Arrays.sort(d, new Comparator<DOT>() {
@Override
public int compare(DOT o1, DOT o2) {
if (o1.x == o2.x) {
return o1.y - o2.y;
}
return o1.x - o2.x;
}
});
for (int i = 0; i < d.length; i++) {
System.out.println(d[i].x + " " + d[i].y);
}
}
public static class DOT {
int x, y;
DOT(int x, int y) {
this.x = x;
this.y = y;
}
}
}'프로그래머스 백준 문제' 카테고리의 다른 글
| 12015 번 가장 긴 증가하는 부분 수열2 (0) | 2025.07.16 |
|---|---|
| 3986 좋은 단어 (0) | 2025.07.14 |
| 9935번 문자열 폭발 (2) | 2025.06.19 |
| 백준 1920 (0) | 2025.06.16 |
| 백준 10816 숫자카드2 (0) | 2025.06.16 |