T_era
[JAVA] Comparator 구현하기 본문
백준 1181번 문제를 풀기위해 Comparator를 알아보았다
Comparator
- 두 매개변수를 비교하기 위한 인터페이스
- 인터페이스이기 때문에 직접 재정의를 해주어 사용해야한다.
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
}
해당 인터페이스는 이렇게 선언되어 있다.
o1과 o2를 비교하여 정수형을 리턴하는 형태
문제를 풀기위해 구현한 익명메소드
Arrays.sort(words, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if (s1.length() != s2.length()) {
return s1.length() - s2.length();
} else {
return s1.compareTo(s2);
}
}
});
Arrays.sort()는 정렬을 위한 메소드인데 words를 compare한 기준으로 정렬해준다
이렇게 선언하게 되면 compare 결과가 양수일 경우 두 값의 자리를 바꿔준다
내가 구현한 방식은 문자열을 정렬하기 위해서 문자열 길이가 다를 경우 짧은 순으로 정렬을 하고
문자열 길이가 같을 경우 compareTo를 통해 문자열의 내용을 비교하여 정렬을 한다
compareTo의 경우도 두 문자열을 비교하여 s1이 유니코드상 크기가 더 큰 경우 양수를 반환한다
전체 코드
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
// 백준 1181 : 단어정렬
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
HashSet<String> word = new HashSet<>();
ArrayList<String> temp = new ArrayList<>();
int count = Integer.parseInt(br.readLine());
// HashSet을 이용해 입력과 동시에 중복 삭제
for (int i = 0; i < count; i++){
String str = br.readLine();
if(word.add(str)){
temp.add(str);
}
}
String[] words = temp.toArray(new String[0]);
// Comparator를 이용해 문자열 길이를 비교했을 때 s2가 s1보다 짧으면 양수를 반환 = Sort를 통해 자리를 바꿈
// 하지만 길이가 같으면 compareTo <- 유니코드를 통해 문자하나하나의 우선순위를 비교 s2가 더 작은 문자열이면 양수를 반환 = Sort를 통해 자리를 바꿈
Arrays.sort(words, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if (s1.length() != s2.length()) {
return s1.length() - s2.length();
} else {
return s1.compareTo(s2);
}
}
});
for (String s : words) {
bw.write(s);
bw.newLine();
}
bw.flush();
bw.close();
br.close();
}
}
'Programing > Java' 카테고리의 다른 글
| [JAVA] 병합정렬 구현하기 (0) | 2025.04.02 |
|---|---|
| [JAVA] 퀵정렬 알고리즘 구현하기 (0) | 2025.04.02 |
| [JAVA] HashSet이란??? (0) | 2025.03.28 |
| [JAVA] 스코프와 형변환 (0) | 2025.03.28 |
| [JAVA] 반복문 (0) | 2025.03.28 |