[백준] 1181번 : 단어 정렬

김건우·2023년 7월 9일
0

문제 풀이

목록 보기
4/62

단어 정렬


Comparable과 Comparator의 차이

우선 먼저 알아야 할 개념에 대해서 정리한다.

공통점이라면 Comparable과 Comparator는 모두 인터페이스다.
즉, Comparable이나 Comparator를 사용하려 한다면 각 인터페이스 내에 구현된 메소드를 반드시 구현해야 한다는 것이다.

Comparable

Comparable 인터페이스에는 compareTo(T o) 메소드 하나가 선언되어있다.

Comparator

Comparator 인터페이스에는 많은 메소드가 선언되어 있지만, 이번에 사용할 메소드는 compare(T o1, T o2)를 사용한다.


compare 메소드는 3가지 리턴 값에 의해 위치를 바꿀지 결정하게 된다.
  • 양의 정수
  • 0
  • 음의 정수

양수일 경우 : Arrays.sort 정렬 알고리즘으로 위치를 바꿈.

0 이나 음수 : 두 객체의 위치가 바뀌지 않음.


구현

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));
        StringBuilder sb = new StringBuilder();
        int N = Integer.parseInt(br.readLine());
        String[] arr = new String[N];

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

        Arrays.sort(arr, 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(); //길이순 정렬
                }
            }
        });

        sb.append(arr[0]).append('\n');
        for(int i=1;i<N;i++){
            if(arr[i].equals(arr[i-1])){ //중복제거
                continue;
            }
            sb.append(arr[i]).append('\n');
        }
        System.out.println(sb);
    }
}

다음 오버라이딩 부분을 람다식으로 나타낼 수 있다.

        Arrays.sort(arr,(o1,o2)->{
            if(o1.length()==o2.length()){
                return o1.compareTo(o2);
            }
            else{
                return o1.length()-o2.length();
            }
        });
profile
공부 정리용

0개의 댓글