TIL(Today I Learned)

99클럽 코테 스터디 13일차 TIL + 백준 1181 (단어 정렬, java)

zincah 2025. 4. 16. 21:05
반응형

오늘의 학습 키워드

  • 정렬

문제 탐색하기

문제

 

문제 풀이 설계하기

문제를 풀기위해서는 주어진 조건에 따라 문자열을 정렬시켜 줘야합니다. 정렬 조건을 직접 제시하는 것으로 봐서 java의 Collections를 활용해서 정렬 조건을 커스텀해서 문제를 풀 수 있을 것 같습니다.

 

컬렉션 프레임워크 정렬에 대한 간단한 개념

자바는 Collections 클래스를 제공합니다. Collection에 대한 다양한 작업을 수행하는 정적 메서드를 제공하는데, 이 중에서 컬렉션을 정렬하는 메서드는 sort()입니다.

 

Collections.sort() 메서드는 두 가지 방식으로 정렬을 수행할 수 있습니다.

  • Comparable 사용 : 자체 비교(Natural Ordering), 컬렉션의 요소들이 Comparable 인터페이스를 구현하고 있는 경우, Collections.sort()는 이 인터페이스의 compareTo() 메서드에 정의된 자연스러운 순서(natural ordering)에 따라 요소를 정렬합니다. 예를 들어, Integer, String, Date 클래스는 Comparable을 구현하고 있으며, 숫자, 사전 순서, 시간 순서대로 정렬됩니다.
  • Comparator 사용 : 외부 비교(Comparator): 컬렉션의 요소들이 Comparable을 구현하지 않았거나, 기본 자연스러운 순서가 아닌 다른 기준으로 정렬하고 싶은 경우, Comparator 인터페이스를 구현한 객체를 Collections.sort() 메서드의 두 번째 인자로 전달하여 정렬 방식을 지정할 수 있습니다. Comparator 인터페이스의 compare() 메서드는 두 객체를 비교하여 정렬 순서를 결정합니다.

 

여기서 저는 이 문제를 comparator를 익명 내부 클래스로 선언해서 문제를 풀도록 하겠습니다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
        }

        ArrayList<String> list = new ArrayList<>(set);
        Collections.sort(list, new Comparator<String>(){
            @Override
            public int compare(String o1, String o2) {
                int check = Integer.compare(o1.length(), o2.length());
                if(check == 0){
                    return o1.compareTo(o2);
                }
                return check;
            }
        });

        for(String str : list){
            System.out.println(str);
        }
    }
}

 

 

오늘의 회고

오늘 풀었던 문제를 보니 예전에도 2번이나 풀었던 문제였습니다. 그런데도 불구하고 왜 매번 collections 정렬을 통해 문제를 풀려고하면 찾아봐야하는지... 이번에는 좀 더 오래 활용할 수 있도록 개념을 정리해서 블로그 글을 작성해 보았습니다.

 

반응형