[Lv.1] 단어 정렬하기

박준원·2024년 4월 6일

정렬

목록 보기
9/12

문제 이해

주어진 알파벳 소문자로 이루어진 N개의 단어를 다음의 조건에 따라 정렬하는 프로그램을 작성해야 합니다

  1. 길이가 짧은 단어부터 정렬합니다.
  2. 길이가 같은 경우에는 사전 순으로 정렬합니다.
  3. 중복된 단어는 하나만 남기고 제거합니다.

알고리즘 설계

  1. 주어진 N개의 단어를 ArrayList에 저장합니다.
  2. Comparator를 사용하여 단어들을 길이 순으로 정렬합니다.
  3. 길이가 같은 경우에는 compareTo() 메서드를 이용하여 사전 순으로 정렬합니다.
  4. 정렬된 단어들을 중복을 제거하면서 출력합니다.

소스 코드 구현

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;

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());
        ArrayList<String> words = new ArrayList<>();

        // 단어를 ArrayList에 저장
        for (int i = 0; i < N; i++) {
            words.add(br.readLine());
        }

        // Comparator를 이용하여 정렬
        Collections.sort(words, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                if (s1.length() == s2.length()) {
                    return s1.compareTo(s2);
                }
                return Integer.compare(s1.length(), s2.length());
            }
        });

        // 중복 제거를 위해 HashSet을 이용하여 정렬된 단어들을 저장
        HashSet<String> uniqueWords = new HashSet<>(words);

        // 정렬된 단어들을 출력
        for (String word : words) {
            if (uniqueWords.contains(word)) {
                System.out.println(word);
                uniqueWords.remove(word); // 중복 제거
            }
        }
    }
}

소스 분석

이 코드는 주어진 N개의 단어를 조건에 맞게 정렬하는 기능을 수행합니다. 먼저 입력된 단어들을 ArrayList에 저장하고, Comparator를 이용하여 정렬을 수행합니다. 길이가 같은 경우에는 compareTo() 메서드를 이용하여 사전 순으로 정렬합니다. 그 후, 중복을 제거하면서 정렬된 단어들을 출력합니다.

profile
08년생 Programmer - C++, Java, Kotlin

0개의 댓글