자바 코딩테스트

백준 1181 단어정렬

백엔드 개발자 2025. 4. 16. 23:21

 

알파벳 소문자로 이루어진 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는 사전순으로 정렬하는 방법. 내부적으로 유니코드끼리 비교해서 사전순처럼 정렬이 된다.