Programing/BaekJoon

[JAVA] 백준 1181 : 단어정렬

블스뜸 2025. 3. 29. 15:05

HashSet을 통해 중복 내용을 제거
Arrays.sort를 통해 정렬을 하는데 Comparator를 익명메소드로 구현하여 정렬 기준으로 만들었다 

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;

// 백준 1181 : 단어정렬
public 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));
        HashSet<String> word = new HashSet<>();
        ArrayList<String> temp = new ArrayList<>();

        int count = Integer.parseInt(br.readLine());

        // HashSet을 이용해 입력과 동시에 중복 삭제
        for (int i = 0; i < count; i++){
            String str = br.readLine();
            if(word.add(str)){
                temp.add(str);
            }
        }
        String[] words = temp.toArray(new String[0]);

        // Comparator를 이용해 문자열 길이를 비교했을 때 s2가 s1보다 짧으면 양수를 반환 = Sort를 통해 자리를 바꿈
        // 하지만 길이가 같으면 compareTo <- 유니코드를 통해 문자하나하나의 우선순위를 비교 s2가 더 작은 문자열이면 양수를 반환 = Sort를 통해 자리를 바꿈
        Arrays.sort(words, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                if (s1.length() != s2.length()) {
                    return s1.length() - s2.length();
                } else {
                    return s1.compareTo(s2);
                }
            }
        });
        for (String s : words) {
            bw.write(s);
            bw.newLine();
        }

        bw.flush();
        bw.close();
        br.close();
    }
}