본문 바로가기
Algorithm Study/BaekJoon (JAVA)

백준 1181_단어 정렬_JAVA

by 창브로 2024. 3. 26.
728x90

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

 

1181번: 단어 정렬

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

www.acmicpc.net

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

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());
        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 s1, String s2) {
                // 글자 수 비교
                int lengthCompare = Integer.compare(s1.length(), s2.length());
                if (lengthCompare != 0) {
                    // 음수를 반환하면 앞의 글자가 뒤의 글자보다 더 짧으니 앞으로 정렬
                    // 양수를 반환하면 앞의 글자가 뒤의 글자보다 더 기니 뒤로 정렬
                    return lengthCompare;
                } else {
                    // 사전 순으로 정렬
                    return s1.compareTo(s2);
                }
            }
        });

        // 중복 제거
        System.out.println(arr[0]);
        for (int i = 1; i < arr.length; i++) {
            if (!arr[i].equals(arr[i-1])) {
                System.out.println(arr[i]);
            }
        }
    }
}

 

회고

- 자바 문자열을 잘 다룰줄 몰라 나한테는 너무 어려웠다.

- sort에 조건을 커스텀 하는 법이 처음이라 생소했다.

- 문자열을 집중적으로 풀어봐야겠다.

'Algorithm Study > BaekJoon (JAVA)' 카테고리의 다른 글

백준 1969_DNA_JAVA  (1) 2024.03.28
백준 1764_듣보잡_JAVA  (0) 2024.03.27
백준 14888_연산자 끼워넣기_JAVA  (0) 2024.03.25
백준 1929_소수 구하기_JAVA  (1) 2024.03.22
백준 1541_잃어버린 괄호_JAVA  (0) 2024.03.21