ALGORITHM

[JAVA] 백준 1181번 - 단어 정렬

연듀 2022. 9. 28. 21:15

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

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());

        ArrayList<String> words = new ArrayList<>();
       while(n-- > 0){
           String word = br.readLine();
           words.add(word);
       }

       // 1. 길이가 짧은 것 부터
        // 2. 길이가 같으면 사전 순으로

       words.sort((o1, o2) -> {
           if(o1.length() == o2.length()){ // 길이가 같으면
               return o1.compareTo(o2); // 사전 순으로
           }
           return o1.length()-o2.length(); // 길이가 짧은 것 부터
       });

       for(int i=0; i<words.size(); i++){
           if(i==0) System.out.println(words.get(0));
           else if(!words.get(i-1).equals(words.get(i))) System.out.println(words.get(i));
       }
    }
}

 

 

sort함수를 이용해 조건에 맞게 정렬한다.

중복 제거를 위해 출력할 때 이전 인덱스의 데이터와 같지 않을때만 출력했다.