본문 바로가기

알고리즘/BAEKJOON

19598 최소 회의실 개수

19598번: 최소 회의실 개수 (acmicpc.net)

 

19598번: 최소 회의실 개수

2개 회의실로 3개 회의를 모두 진행할 수 있다. 예를 들어, 첫번째 회의실에서 첫번째 회의를 진행하고 두번째 회의실에서 두번째 회의와 세번째 회의를 진행하면 된다. 1개 회의실로 3개 회의

www.acmicpc.net

package Heap;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Baekjoon_19598_최소회의실개수 {
	
	public static class Meeting implements Comparable<Meeting>{
		int start, end;
		
		public Meeting(int start, int end) {
			this.start = start;
			this.end = end;
		}
		
		// 끝나는 시간을 기준으로 우선 정렬
		@Override
		public int compareTo(Meeting m) {
			if(this.start == m.start) return this.end - m.end;
			return this.start - m.start;
		}
	}

	public static void main(String[] args) throws Exception {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = null;
		
		int N = Integer.parseInt(br.readLine());
		ArrayList<Meeting> list = new ArrayList<>();
	
		for(int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine(), " ");
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			list.add(new Meeting(a,b));
		}
		Collections.sort(list);
		
		int room = 0, ans = Integer.MIN_VALUE;
		PriorityQueue<Integer> pq = new PriorityQueue<>();
		for(int i = 0; i < N; i++) {
			room++;
			pq.offer(list.get(i).end);
			while(list.get(i).start >= pq.peek()) {
				room--;
				pq.poll();
			}
			ans = Math.max(room, ans);
		}
		System.out.println(ans);

	}

}

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

10815 숫자 카드_Binary Search  (0) 2021.07.13
2417 정수 제곱근_Binary Search  (0) 2021.07.12
19638 센티와 마법의 뿅망치_Heap  (0) 2021.07.09
11279 최대 힙_Heap  (0) 2021.07.08
14621 나만 안되는 연애_Prim  (0) 2021.07.06