Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Tags
more
Archives
Today
Total
관리 메뉴

forDevLife

[백준] 1931 - 회의실 배정 (자바) 본문

알고리즘

[백준] 1931 - 회의실 배정 (자바)

JH_Lucid 2021. 4. 30. 15:42

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        //배열 개수 선언, int[N][0] = 시작점, int[N][1] = 종료점
        int[][] arr = new int[N][2];
        StringTokenizer st;

        for(int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            arr[i][0] = Integer.parseInt(st.nextToken());
            arr[i][1] = Integer.parseInt(st.nextToken());
        }

        Arrays.sort(arr, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                //끝 점이 동일하면, 시작점이 빠른 순서로 정렬
                if(o1[1] == o2[1]) {
                    return o1[0] - o2[0];
                } else
                    return o1[1] - o2[1];
            }
        });
        int count = 0;
        int finish_line = 0;
        for(int i=0; i<N; i++) {
            if(finish_line <= arr[i][0]) {
                count++;
                finish_line = arr[i][1];
            }
        }
        System.out.print(count);
    }
}

- arr[i][1], 즉 끝나는 시간 기준으로 정렬하기 위해, compare 재정의가 필요하다.

- return o1[1] - o2[1]로 끝나는 시간 기준 오름차순으로 정렬된다.

- 2차원 배열일 경우에 Arrays.sort에 new Comparator를 전달하여 재정의할 수 있다.

- sorting 하고자 하는 2차원 배열 'arr'은 1차원 배열 int[]로 이루어져 있다. 따라서 new Comparator<int[]>로 작성하여, compare에서 int[]를 기준으로 정렬을 진행해야 한다.

- 즉, sort의 두 번째 인자로는 2차원 배열 내의 정렬 대상(여기에서는 1차원 배열 int[])이 와야한다.

- 헷갈리면 : dundung.tistory.com/112

 

Comparable, Comparator, 배열을 정렬하는 여러가지 방법

JAVA에서 배열을 정렬을 하는 방법은 여러가지가 있다. 먼저 기본 자료형인 int, double, String 등의 배열은 Arrays.sort() 메서드를 호출하면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 import java.util.Arrays; publ..

dundung.tistory.com

 

- 기본적으로 오름차순

- return o1[0] - o2[0] 결과가 > 0 : 앞에가 크다는 의미로, 양수 반환하여 내림차순됨

- return o1[0] - o2[0] 결과가 < 0 : 뒤에가 크다는 의미로, 음수 반환하여 오름차순(그대로 유지)

'알고리즘' 카테고리의 다른 글

[백준] 13305 - 주유소 (자바)  (0) 2021.05.01
[백준] 1541 - 잃어버린 괄호 (자바)  (0) 2021.04.30
[백준] 11399 - ATM (자바)  (0) 2021.04.30
[백준] 11047 - 동전0 (자바)  (0) 2021.04.30
[코드업] 기초 100제 JAVA  (0) 2021.04.26
Comments