Contents

백준 1181번, 단어 정렬 (with.Java)

   Aug 6, 2025     2 min read

백준 1181번, 단어 정렬 (with.Java) 에 대하여 알아본 글입니다.

코딩 테스트 문제를 풀며, 풀었던 문제에 대한 회고와 다른 풀이 방법을 알아보며, 알아가고자 합니다.

문제에 대해 먼저 알아보겠습니다.

문제

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

입력

첫째 줄에 단어의 개수 N이 주어진다.

(1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다.

주어지는 문자열의 길이는 50을 넘지 않는다.

출력

조건에 따라 정렬하여 단어들을 출력한다.

문제 풀이

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.valueOf(br.readLine());
        String[] arr = new String[N];
        for(int i = 0; i < N; i++){
            arr[i] = br.readLine();
        }

        for(int i = 0; i < N; i++){
            for(int j = i + 1; j < N; j++){
                if(arr[i].length() == arr[j].length()){
                    if(arr[i].compareTo(arr[j]) > 0){
                        String temp = arr[j];
                        arr[j] = arr[i];
                        arr[i] = temp;
                    }
                }else{
                    if(arr[i].length() > arr[j].length()){
                        String temp = arr[j];
                        arr[j] = arr[i];
                        arr[i] = temp;
                    }
                }
            }
        }
        for(int i = 0; i < N; i++){
                if(i > 0){
                    if(arr[i].compareTo(arr[i - 1]) != 0){
                        System.out.println(arr[i]);
                    }
                }else{
                    System.out.println(arr[i]);
                }
            }
    }
}

풀이 설명

이 코드는 문자열 배열을 길이와 사전순으로 정렬한 후, 중복된 문자열을 제거하여 출력하는 프로그램입니다.

먼저, BufferedReader를 사용해 입력을 받습니다.

첫 번째 줄에서 문자열의 개수 N을 읽고, 이후 N개의 문자열을 배열 arr에 저장합니다.

그 다음, 이중 for 루프를 통해 배열을 정렬합니다.

정렬의 기준은 두 가지입니다.

첫째, 문자열의 길이가 짧은 것이 앞에 오도록 합니다.

둘째, 길이가 같을 경우 사전순으로 정렬합니다. 이 과정을 통해 배열이 원하는 순서대로 정렬됩니다.

정렬이 완료된 후, 배열을 다시 한 번 순회하면서 중복된 문자열을 제거하고 출력합니다.

배열의 첫 번째 요소는 무조건 출력하고, 그 이후의 요소들은 이전 요소와 비교하여 다른 경우에만 출력합니다.

이를 통해 정렬된 상태에서 중복된 문자열을 제거한 결과가 출력됩니다.