본문 바로가기
자바 코딩테스트

백준 1181 단어정렬

by 백엔드 개발자 2025. 4. 16.

 

알파벳 소문자로 이루어진 N개 단어가 들어올때

1. 길이가 짧은 것부터

2. 길이가 같으면 사전순. 

으로 정렬하는 프로그램 작성.

중복단어는 하나만 남기고 제거

 

제한은 2초, N은 2만까지.

 

예제 입력 1 복사

13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours

예제 출력 1 복사

i
im
it
no
but
more
wait
wont
yours
cannot
hesitate

 

 

 

 

 

1. 중복 제거면 set 생각중.

2. 정렬 

 

 

 

길이 순으로 정렬하고 같으면 사전순으로 정렬하는 커스텀하게 정렬하는 로직에서 막혔었다.

 

방법은 Comparator<>를 따로 구현하고, Arrays.sort를 사용한 방법.

그후 중복 제거를 위해서 set으로 바꿔보았다.

 

 

 

package 백준.단어정렬1181;

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int count = Integer.parseInt(br.readLine());

        String [ ] arr = new String[count];

        for (int i = 0; i < count; i++) {
            arr[i] = (br.readLine());
        }

        Arrays.sort(arr, new Comparator<>() {
            public int compare(String o1, String o2) {
                if (o1.length() == o2.length()) {
                    return o1.compareTo(o2);
                }
                return o1.length() - o2.length();
            }
        });
        Set<String> set = new LinkedHashSet<>(Arrays.asList(arr));

        for (String s : set) {
            System.out.println(s);
        }
        br.close();
    }
}

 

 

 

배운 부분

1. Comparator의 compare는 양수일 경우 위치를 바꾼다.

그래서 길이가 다르면 바꾸도록 앞의 문자열의 길이 - 뒤 문자열의 길이를 활용했다.

2. compareTo는 사전순으로 정렬하는 방법. 내부적으로 유니코드끼리 비교해서 사전순처럼 정렬이 된다.