티스토리 뷰

반응형

www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 


 

 

 문제

 입력

 출력

 예제 입출력

 알고리즘 분류

  • 문자열
  • 정렬

 


 

 문제 접근 과정

 

배열이 특정한 규칙( 1. 길이가 짧은 것부터, 2. 길이가 같으면 사전 순으로)을 통해 정렬하라는 걸 보고

함수를 어떻게 만들어야할지 고민을 했다. 생각이 끝나고 함수를 구현하고 있었는데 코드가 말도 안 되게

길어지는 것을 보고 아니라고 생각했다.

 

그러다 Arrays.sort의 Comparator를 알게 되었다.

 

Comparator를 사용하자 코드 길이가 많이 짧아졌다.

 


 

Comparator

 

  • Comparator란?

       Comparator는 객체 간 특정한 규칙이 필요할 때 사용한다.

 


 

 문제 풀이

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();
        String[] str = new String[N];

        for (int i = 0; i < N ; i++) {
            str[i]=in.next();
        }

        Arrays.sort(str, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                if (o1.length() == o2.length()) {
                    return o1.compareTo(o2);
                }
                else {
                    return o1.length() - o2.length();
                }
            }
        });

        System.out.println(str[0]);
        for(int i =1 ; i < N; i++) {
            if (!str[i].equals(str[i-1])) {
                System.out.println(str[i]);
            }
        }
    }
}

 

 

 


 결과

 

 


 마무리

 

 

배열에 특정한 정렬이나 일반적인 정렬이 필요할 때, 자바에서는 Comparator나 Comparable를 활용하자.

 

 

 

 

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함