[백준] 19598: 최소 회의실 개수 - JAVA

https://www.acmicpc.net/problem/19598

풀이

회의의 시작, 종료 시간이 주어지고 최의실을 배정해야 한다.

회의실의 개수를 최소로 해야한다.

시작시간 순으로 정렬을해서 차례대로 회의실에 집어넣었다.

우선순위큐에 종료시간을 넣고, 우선순위큐의 peek이 새로 들어갈 회의의 시작시간보다 작다면 그 방을 사용할 수 있다.


메모리: 48764KB

시간: 668ms

언어: Java 11

코드

import java.util.*;
import java.io.*;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        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[0] == o2[0]) {
                    return Integer.compare(o1[1], o2[1]);
                }
                return Integer.compare(o1[0], o2[0]);
            }
        });

        PriorityQueue<Integer> room = new PriorityQueue<>();
        room.add(arr[0][1]);
        int cnt = 1;
        for (int i = 1; i < N; i++) {
            if (room.peek() <= arr[i][0]) {
                room.poll();
            } else {
                cnt++;
            }
            room.add(arr[i][1]);
        }

        System.out.println(cnt);
    }

}