처음에 Arrays.sort()를 확장하여 풀려고 시도했으나 이해가 부족했는지 실패하고 결국 선택정렬을 이용해서 풀어냈다.
인터넷 검색을 통해서 풀이를 봤더니 Arrays.sort()의 compare 메소드를 이해할 수 있었다.
int 배열을 Arrays.sort로 정렬할 때 compare 메소드에서는 보통 e1-e2 값을 return 한다. e1-e2 값이 0이면 같고, 양수이면 e1이 크고, 음수이면 e2가 크다는 것을 이용한 것이다.
return 값의 의미를 제대로 이해하지 못해서 Arrays.sort에서 compare 메소드 오버라이드를 제대로 해내지 못했었다.
참고링크: https://st-lab.tistory.com/112
이 문제에서는 int가 아닌 String 배열을 이용하기 때문에 (e1 - e2) 값이 아닌 compareTo 메소드를 이용한다.
참고로 자바에서 문자열끼리 비교할 때는 ==가 아닌 compareTo를 써야한다. ==은 object가 동일한지 아닌지를 판단하기 때문이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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 list[]=new String[N];
for(int i=0; i<N; i++)
list[i] = br.readLine();
for(int i=0; i<N; i++)
{
for(int j=i+1; j<N; j++)
{
if(list[i].length()==list[j].length()) {
if(list[i].compareTo(list[j])>0) {
String tmp = list[j];
list[j]=list[i];
list[i]=tmp;
}
}
else {
if(list[i].length()>list[j].length()) {
String tmp = list[j];
list[j]=list[i];
list[i]=tmp;
}
}
}
}
for(int i=0; i<N; i++) {
if(i!=0) {
if(list[i].compareTo(list[i-1])!=0)
System.out.println(list[i]);
}
else
System.out.println(list[i]);
}
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
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 list[]=new String[N];
for(int i=0; i<N; i++)
list[i] = br.readLine();
Arrays.sort(list, new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
if(o1.length()==o2.length())
return o1.compareTo(o2);
else
return o1.length()-o2.length();
}
});
for(int i=0; i<N; i++) {
if(i!=0) {
if(list[i].compareTo(list[i-1])!=0)
System.out.println(list[i]);
}
else
System.out.println(list[i]);
}
}
}
선택정렬과 Arrays.sort를 사용했을 때의 시간차이가 꽤 난다ㄷㄷ