알고리즘 공부
백준 최소 회의실 개수
컴퓨터과학
2024. 4. 2. 21:54
https://www.acmicpc.net/problem/19598
19598번: 최소 회의실 개수
서준이는 아빠로부터 N개의 회의를 모두 진행할 수 있는 최소 회의실 개수를 구하라는 미션을 받았다. 각 회의는 시작 시간과 끝나는 시간이 주어지고 한 회의실에서 동시에 두 개 이상의 회의
www.acmicpc.net
그리드 문제이고 우선순위 큐만 잘 커스텀하면 쉽게 푸는 문제네요.
import java.util.*;
import java.io.*;
public class Main {
public static void Prints(PriorityQueue<Meetings>q){
}
public static class Meetings{
public int start;
public int end;
public Meetings(int start, int end){
this.start=start;
this.end=end;
}
}
public static void main(String[] args) throws Exception {
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
Comparator<Meetings> comparator =new Comparator<Meetings>(){
@Override
public int compare(Meetings m1, Meetings m2){
if(m1.start<m2.start){
return -1;
}else if(m1.start>m2.start) {
return 1;
}
return 0;
}
};
Comparator<Meetings> comparator2 =new Comparator<Meetings>(){
@Override
public int compare(Meetings m1, Meetings m2){
if(m1.end<m2.end){
return -1;
}else if(m1.end>m2.end) {
return 1;
}
return 0;
}
};
PriorityQueue<Meetings>q=new PriorityQueue<>(comparator);
for(int i=0;i<n;i++){
int start=scan.nextInt();
int end=scan.nextInt();
q.add(new Meetings(start,end));
}
PriorityQueue<Meetings>save=new PriorityQueue<>(comparator2);
while (!q.isEmpty()){
Meetings mstart=q.peek();
q.poll();
//System.out.println(mstart.start+","+mstart.end);
//for(int i=0; i<save.size(); i++){
if(save.size()>0){
if( save.peek().end <= mstart.start ){
save.poll();
// break;
}
}
save.add(mstart);
}
System.out.println(save.size());
}
}