본문 바로가기
알고리즘/Class 2

백준 BOJ 1181번

by edvedv 2022. 8. 13.


접근 방법

 

자바에서 배열을 특정한 규칙에 의해 정렬하고 싶을 때는 Arrays.sort 메소드에 Comparator를 구현하면 된다.

 

Arrays.sort()와 Comparator로 정렬하기

Arrays.sort() 메소드는 기본적으로 두 객체를 비교하여 위치를 바꿀지 말지 판단하고 정렬한다.

이 때 Comparator는 객체를 비교해서 메소드가 판단할 수 있도록 하는 인터페이스다.

 

기본적인 형태는 아래와 같다.

Arrays.sort(a, new Comparator<T>() {		
	@Override
	public int compare(T a1, T a2) {
		/*
        	정렬 방법
        	*/
	}
});

여기서 T = Type 을 의미한다. 객체나 자료형 등의 다양한 타입을 설정할 수있다. 

 

이 문제에서는 단어를 정렬하니까 배열의 타입은 String일 것이다. 즉 T = String 이다.

T를 설정했다면, 다음에 해야할 것은 compare 메소드에 정렬 방법을 구현하는 것이다.

 

그리고 compare 메소드의 리턴 타입은 int인데, 이는 compare 메소드가 3가지 리턴 값에 의해 판단하기 때문이다.

  • 양의 정수 : 위치를 바꾼다.
  • 0 : 위치를 바꾸지 않는다.
  • 음의 정수 : 위치를 바꾸지 않는다.

예를 들면, { 3, 1, 5 } 라는 배열이 있고, compare 메소드가 return a1 - a2 라 해보자.

  1. a1 = 2, a2 = 1 이고 3 - 1 = 2 로 양수이기 때문에 a1과 a2의 위치가 바뀐다. { 1, 3, 5 }
  2. a1 = 3, a2 = 5 이고 3 - 5 = -2 로 음수이기 때문에 a1과 a2의 위치가 바뀌지 않는다. { 1, 3, 5 }

 


코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String arr[] = new String[in.nextInt()];
        for(int i = 0; i < arr.length; i++){
            arr[i] = in.next();
        }
        Arrays.sort(arr, new Comparator<String>(){
            public int compare(String s1, String s2){
                if(s1.length() == s2.length()){
                    return s1.compareTo(s2);
                }
                else {
                    return s1.length() - s2.length();
                }
            }
        });
        System.out.println(arr[0]);
        for(int i = 1; i < arr.length; i++){
            if(!arr[i].equals(arr[i-1])){
                System.out.println(arr[i]);
            }
        }
    }
}

'알고리즘 > Class 2' 카테고리의 다른 글

백준 BOJ 1654번  (0) 2022.08.16
백준 BOJ 1436번  (0) 2022.08.15
백준 BOJ 1259번  (0) 2022.08.15
백준 BOJ 1085번  (0) 2022.08.09
백준 BOJ 1018번  (0) 2022.08.01

댓글