
N개의 단어가 주어졌을 때, 단어의 길이가 짧은 순, 길이가 같으면 사전 순으로 나열하는 문제이다.
이 문제를 풀기 위해선 중복을 제거하기 위한 Set과 이를 다시 정렬하는 List, 그리고 단어를 정렬하기 위한 Collections.sort() 메소드를 알아야 한다.
Set은 List와 달리 데이터의 중복을 허용하지 않지만, 순서를 보장하진 않는다.
문제에서 중복된 단어를 제거하라 했으므로
먼저 Set으로 중복된 단어를 걸러내고,
이를 List로 옮겨 순서를 나열하는 방식으로 가야한다.
List로 옮겨진 데이터들을 정렬하는 메소드는
Arrays.sort() 대신
Collections.sort()를 사용한다.
위 정보를 바탕으로 설계한 코드는 다음과 같다.
import java.util.*;
import java.io.*;
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));
Set<String> set = new HashSet<>();
int N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++){
set.add(br.readLine());
}
List<String> list = new ArrayList<>(set);
Collections.sort(list, (s1, s2) ->
s1.length() == s2.length() ? s1.compareTo(s2) : s1.length() - s2.length()
);
// 자바쪽에서 s1과 s2를 자동으로 검사하여 정렬해준다.
for(String s : list){
bw.write(s + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
맞았습니다!!