새발블로그

[백준/Java] 11000 강의실 배정 본문

Problem Solving/Baekjoon

[백준/Java] 11000 강의실 배정

EUG 2025. 7. 1. 14:07

문제

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

풀이방법

회의실 배정 문제에서 보다 생각해야할 것: 최소의 강의실 사용
한 강의실은 다른 강의실이 사용 중일 때 사용중일 수 있다

풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.PriorityQueue;
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[][] time = new int[N][2];

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

        //시작 시간이 빠른 순서대로 정렬, 시작 순서가 같으면 종료 시간이 빠른 순으로 정렬
        Arrays.sort(time, (o1,o2)-> {
            if(o1[0]==o2[0]){
                return o1[1]-o2[1];
            }
            return o1[0]-o2[0];
        });

        //종료 시간을 기준으로 관리할 pq
        PriorityQueue<Integer> pq = new PriorityQueue<>();

        for (int[] t : time) {
            // 가장 빨리 끝나는 강의의 종료 시간이 이미 끝나서 재사용 가능
            if (!pq.isEmpty() && pq.peek()<=t[0]){
                pq.poll();
            }
            //현재 강의 종료 시간 추가
            pq.add(t[1]);
        }
        System.out.println(pq.size());
    }
}

 

 

'Problem Solving > Baekjoon' 카테고리의 다른 글

[백준/Java] 15649 N과 M(1)  (0) 2025.07.01
[백준/Java] 10974 모든 순열  (0) 2025.07.01
[백준/Java] 1931 회의실 배정  (0) 2025.07.01
[백준/Java] 1436 영화감독 숌  (0) 2025.07.01
[백준/Java] 11652 카드  (0) 2025.07.01