백준 알고리즘/Java

[백준] 1181. 단어 정렬 - Java

리버🐦‍🔥 2025. 4. 22. 02:08

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

 

⭐️ 중요 포인트

1. 정렬 시 원시 타입을 객체 타입으로 (ex. int -> Integer) 바꿔 정렬하는게 편하다.

2. Comparator를 선언하여 여러 종류의 정렬을 한 꺼번에 처리할 수 있다.

3. 이 때, public int compare()를 꼭 Override 해줘야 한다.

4. String.compareTo()를 사용하면 사전식 정렬을 할 수 있다.

5. 이 때 선언한 Comparator 객체는 "Collections.sort(정렬할 배열, Comparator 객체)" <- 이 부분에 사용된다.

 

import java.util.*;
import java.io.*;

public class P1181 {

    static BufferedReader br;
    static BufferedWriter bw;
    static ArrayList<String> arr;
    static int N;

    static Comparator<String> comp = new Comparator<>() {
        @Override
        public int compare(String s1, String s2) {
            if (s1.length() == s2.length()) {
//                for (int i = 0; i < s1.length(); i++) {
//                    if (s1.charAt(i) == s2.charAt(i)) {
//                        continue;
//                    }
//                    return s1.charAt(i) - s2.charAt(i);
//                }
                return s1.compareTo(s2);
            }
            return s1.length() - s2.length();
        }
    };

    static void init() throws IOException {
        br = new BufferedReader(new InputStreamReader(System.in));
        bw = new BufferedWriter(new OutputStreamWriter(System.out));
        arr = new ArrayList<>();

        N = Integer.parseInt(br.readLine());

        for (int i = 0; i < N; i++) {
            arr.add(br.readLine());
        }
    }

    static void solve() throws IOException {
        Collections.sort(arr, comp);
    }

    public static void main(String[] args) throws IOException {

        init();
        solve();

        for (int i = 0; i < arr.size(); i++) {
            if (i == 0) {
                bw.write(arr.get(i) + "\n");
            } else if (!arr.get(i).equals(arr.get(i - 1))) {
                bw.write(arr.get(i) + "\n");
            }
        }

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

    }
}