[BOJ] 11000 강의실 배정

최대 1 분 소요

그리디 예제

문제

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

문제 풀이

package Baekjoon.Greedy;
import java.util.*;

//강의실 배정 - 그리디
public class BJ_11000 {

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);

        int N = s.nextInt();
        int[][] time = new int[N][2];

        for (int i = 0; i < N; i++) {
            time[i][0] = s.nextInt(); //시작 시간
            time[i][1] = s.nextInt(); //끝나는 시간
        }

        Arrays.sort(time, 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> pq = new PriorityQueue<>(); //수업 종료 시간 (오름차순)

        for (int i = 0; i < N; i++) {
            int start = time[i][0];
            int end = time[i][1];

            if (!pq.isEmpty() && pq.peek() <= start) { //해당 수업이 끝나고 맞는 시간대의 수업일 때 (강의실 재사용 가능)
                pq.poll();
            }

            pq.add(end); //다음 수업 추가 (종료 시간)
        }

        System.out.println(pq.size());
    }
}

TMI

21/05/21: 알고리즘 스터디 문제 풀이🤓

댓글남기기