본문 바로가기
Develop/Coding Test | Algorithm

[백준] JAVA 풀이 - 1181 : 단어 정렬

by 코젼 2024. 3. 15.
728x90
반응형

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

 

1181번: 단어 정렬

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

www.acmicpc.net

 

▶️ 풀이

Comparator 인터페이스를 처음 써봐서 문제 풀 때 난관이었는데, 작동법이 신기하고 새로워서 재밌었다 :3

유용하게 쓸 수 있으니 중복 제거 소스도 참고할 것! 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        String[] arr = new String[N];

        for (int i=0; i<N; i++) arr[i] = br.readLine();

        // 객체 비교 인터페이스
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                if (o1.length() == o2.length()) {
                    // 길이가 같은 단어는 사전순으로 정렬한다.
                    // ex) abhg = -7, abcd = -3 이므로 sort 함수를 통해 정렬된다.
                    return o1.compareTo(o2); // 정밀한 숫자로 정렬
                } else {
                    // o1.length() < o2.length() 음수 (길이가 짧은 단어는 앞쪽으로 배치한다.)
                    // o1.length() > o2.length() 양수
                    return o1.length() - o2.length();
                }
            }
        });
        // 중복 제거
        arr = Arrays.stream(arr).distinct().toArray(String[]::new);
        for (String a : arr) System.out.println(a);

        /* 32 --- 중복 제거할 때 StringBuilder에 추가하는 방법으로 풀이할 수 있다.
        * ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
        * StringBuilder sb = new StringBuilder();
        * sb.append(arr[0]).append("\n"); // 첫 번째 값을 먼저 추가한다.
        * for (int i=1; i<N; i++) {
        *   if (!arr[i].equals(arr[i-1])) {
        *       sb.append(arr[i]).append("\n"); // 중복되지 않는 값만 추가한다.
        *   }
        * }
        * */
    }
}

 

Comparator 관련 정리는 해당 블로거 분이 기깔나게 적어두셨다... 🥺

나도 나중에 이런.... 멋있는 블로거가 되고 싶다!!!!

https://st-lab.tistory.com/243

 

자바 [JAVA] - Comparable 과 Comparator의 이해

아마 이 글을 찾아 오신 분들 대개는 Comparable과 Comparator의 차이가 무엇인지 모르거나 궁금해서 찾아오셨을 것이다. 사실 알고보면 두 개는 그렇게 어렵지 않으나 아무래도 자바를 학습하면서 객

st-lab.tistory.com

728x90
반응형

댓글