이전 문제들에서 comparator 메소드를 이용해서 문제를 풀었는데, 간단하게 형태만 외우는게 아니라 이해도가 확실히 필요했다.
쉽게 사용할 수 있게 정리하자면, compare를 통한 compareTo 메소드는 자기자신 s1과 다른 매개변수를 비교해서 양수면 자리를 바꿔주고, 음수 or 0이면 그대로 진행한다. 그리고 comparator은 두 매개변수를 직접 비교하므로 s1.length() - s2.length로 비교해서 양수면 바꿔준다.
Integer.compare(s1.length(), s2.length())도 같은 방법이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
public class java_io {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
int N = Integer.parseInt(br.readLine());
String[] arr = new String[N];
for(int i = 0; i<N; i++) {
arr[i] = br.readLine();
}
Arrays.sort(arr, new Comparator<String>() {
//compare을 오버라이드
public int compare(String s1, String s2) {
//s1을 s2와 비교해서 int로 만듬. 아스키코드 차이를 통해 사전에서 오름차순
if(s1.length() == s2.length()) {
//s1>s2 이면 양수 return 및 자리 바뀜.
return s1.compareTo(s2);
}
//s1길이 - s2 길이가 양수라면 작은 수인 s2가 뒤이므로 오름차순에 의해 순서를 바꿈
else {
return s1.length() - s2.length();
}
}
});
StringBuilder sb = new StringBuilder();
sb.append(arr[0]).append('\n');
for(int i=1; i<N; i++) {
//중복 제거, equals는 변수 주소가 아닌 내용을 비교
if(!arr[i].equals(arr[i-1])) {
sb.append(arr[i]).append('\n');
}
}
System.out.println(sb);
}
} //출처 : Stranger's lab
스스로 풀려고 노력해봤는데 이해도가 많이 부족했던 모양이다. 그렇게 어려운 개념은 아니었는데. 결국 두 매개변수를 어떻게 비교해주고 바꿔주느냐의 문제였다.