Comparator를 이용해 정렬하면 쉽게 풀 수 있다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
public class BaekJoon1181 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
String[] words = new String[n];
for(int i = 0; i < n; i++) {
words[i] = br.readLine(); //배열에 입력받은 각 문자열을 넣어줌
}
Arrays.sort(words, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if(s1.length() == s2.length()) { //문자열의 길이가 같은 경우
return s1.compareTo(s2); //알파벳 오름차순으로 정렬
} else { //문자열의 길이가 다른 경우
return s1.length() - s2.length(); //길이 오름차순으로 정렬
}
}
});
bw.write(words[0] + "\n");
for(int i = 1; i < n; i++) {
if(words[i].equals(words[i - 1])) { //같은 단어가 있을 경우 출력하지 않음
continue;
}
bw.write(words[i] + "\n");
}
bw.flush();
}
}
Comparator를 상속받아 직접 수식을 세우는 과정이 아직 익숙하지 않아 더 연습이 필요할 듯 하다.