종식당

[백준 1181 with JAVA] 단어 정렬 본문

백준

[백준 1181 with JAVA] 단어 정렬

종식당 2025. 2. 4. 21:18
728x90
반응형

 

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

 


📝 문제 설명

문자열을 N개 입력받은 후 길이가 짧은 것부터 만약 길이가 같다면 사전 순으로 정렬해서 출력하면 된다.

✨ 제출 코드

import java.io.*;
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());

        List<String> lst = new ArrayList<>();
        HashSet<String> set = new HashSet<>();

        for(int i = 0; i < N; i++){
            set.add(br.readLine());
        }

        for(String str : set){
            lst.add(str);
        }

        Collections.sort(lst,new Comparator<String>(){
            @Override
            public int compare(String s1, String s2){
                if(s1.length() == s2.length()){
                    return s1.compareTo(s2);
                }else{
                    return s1.length() - s2.length();
                }
            }
        });

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

✌️ 코드 설명

먼저 중복을 제거하기 위해 처음에 입력받을 때 set에 입력을 받았고 이를 리스트에 다시 넣어서 조건에 맞게 정렬을 한 이후에 출력을 해주었다.

😎 마무리

먼저 자바에서 정렬에 대해서 보겠다. 
배열을 정렬할 때는 Arrays.sort(), 리스트를 정렬할 때는 Collections.sort()이다.

이때, 특정 조건에 따라 정렬을 하고 싶다면 Comparator인터페이스를 구현하여 sort메서드에 전달할 수 있다.

Collections.sort(lst, new Comparator<String>(){
    @Override
    public int compare(String s1, String s2){
        if(s1.length() == s2.length()){
            return s1.compareTo(s2);
        }else{
            return s1.length() - s2.length();
        }
    }
});

 

Comparator 인터페이스를 통해 두 객체를 비교하는 방법을 정의한다.

문자열의 길이를 비교할 때는 Comparator 인터페이스의 메서드인 compare(String s1, String s2)를 통해 정렬을 진행한다.

 

  • 음수: s1이 s2보다 앞에 와야 함
  • 0: s1과 s2는 같은 순서로 간주
  • 양수: s1이 s2보다 뒤에 와야 함

문자열의 길이가 같을때는 compareTo를 이용하여 사전순으로 비교한다.

 

 

728x90
반응형

'백준' 카테고리의 다른 글

[백준 2161 with JAVA] 카드1  (0) 2025.02.28
[백준 18870 with JAVA] 좌표 압축  (0) 2025.02.08
[백준 1316 with JAVA] 그룹 단어 체커  (2) 2025.01.30
[백준 14719 with JAVA] 빗물  (3) 2025.01.29
[백준 7562] 나이트의 이동  (1) 2025.01.06