알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours
i
im
it
no
but
more
wait
wont
yours
cannot
hesitate
이 문제는 HashSet을 이용해서 중복 체크를 하고 먼저 길이에 따라 리스트에 저장한 뒤 정렬을 통해서 출력을 했다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
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());
HashSet<String> set = new HashSet<>();
ArrayList<String>[] list = new ArrayList[51];
for(int i=1; i<=50; i++)
list[i] = new ArrayList<>();
for(int i=0; i<N; i++) {
String input = br.readLine();
if(set.add(input)) {
list[input.length()].add(input);
}
}
for(int i=1; i<=50; i++) {
if(list[i].size()!=0) {
Collections.sort(list[i]);
for(int j=0; j<list[i].size(); j++)
System.out.println(list[i].get(j));
}
}
}
}