Notice
Recent Posts
Recent Comments
Link
«   2026/11   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

이지은님의 블로그

[작심큰일] 250808 - 백준 1181번: 단어 정렬 본문

알고리즘 공부/[JAVA] 코드카타

[작심큰일] 250808 - 백준 1181번: 단어 정렬

queenriwon3 2025. 8. 8. 21:11

📜 백준 1181번: 단어 정렬

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

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

단, 중복된 단어는 하나만 남기고 제거해야 한다.

 

 

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

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());
        
        Set<String> set = new HashSet<>();
        for (int i = 0; i < n; i++) {
            set.add(br.readLine());
        }
        
        List<String> list = new ArrayList<>(set);
        
        list.sort((a, b) -> {
            if (a.length() == b.length()) {
                return a.compareTo(b);
            }
            return a.length() - b.length();
        });
        
        for (String word : list) {
            System.out.println(word);
        }
    }
}

문자열을 입력받고

set으로는 중복제거, list로는 정렬을 하기위해 저장한다. 

.sort 람다식은 a, b각각 스트림객체들에 대해 어떻게 정렬할 것인지에 대해 정의할 수 있다.

if (a.length() == b.length())는 a와 b의 객체의길이가 같을 경우 사전순으로 문자열을 비교한다.

같지 않을 경우 길이가 짧은 순으로 정렬한다.

 

 

 

🪛 피드백

📝 코드 설명
- LinkedHashSet 으로 중복 제거와 입력 순서 유지
- ArrayList 로 변환 후 Collections.sort 와 Lamda 식을 사용해 길이와 사전 순 정렬
- 조건에 맞는 순서로 출력

📊 복잡도 분석

시간 복잡도: O(N log N) (N = 단어 개수) - 정렬 비용이 주를 이룸
공간 복잡도: O(N) (중복 제거 및 리스트 저장)

⚡ 최적화 팁

1. [LinkedHashSet] : 중복 제거 시 입력 순서 유지
2. [Comparator 와 Lamda] : Lamda 를 통해 길이와 사전 순 정렬을 한번에 할 수 있음

🎯 학습 포인트

- LinkedHashSet 사용법 - Lamda 사용

🔗 관련 문제

- 중복 제거 및 정렬 시 에는 Set → List → 정렬 이 유리 - 정렬 조건이 여러 개인 것을 대비해 Lamda 연습