알고리즘 공부

백준 강의실배정(복습)

컴퓨터과학 2023. 10. 25. 23:58

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

11000번: 강의실 배정

첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109)

www.acmicpc.net

아 음 지난번에도 우선순위큐의 사용여부에 대한 이해도가 낮아서 해맷던 문제 ㅠ 

import java.io.*;
import java.util.*;
public class Main {
	private int start;
	private int end;
	public Main() {
		
	}
	public Main(int start,int end) {
		this.start=start;
		this.end=end;
	}
	public void start(int start) {
		this.start=start;
	}
	public void end(int end) {
		this.end=end;
	}
	public int start() {
		return this.start;
	}
	public int end() {
		return this.end;
	}
	
	
	public static void main(String[] args) throws Exception {
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		
		ArrayList<Main>lists=new ArrayList<>();
		for(int i=0;i<n;i++) {
			int s=scan.nextInt();
			int e=scan.nextInt();
			lists.add(new Main(s,e));
		}
		Comparator<Main> cmp=(a,b)->{
			if(a.start()==b.start()) {
				return Integer.compare(a.end,b.end);
			}
			return Integer.compare(a.start,b.start);
		};
		
		
		Comparator<Integer>gr=(a,b)->Integer.compare(a, b);
		
		Collections.sort(lists,cmp);
		PriorityQueue<Integer>q=new PriorityQueue<>(gr);
		for(int i=0;i<n;i++) {
			if(q.isEmpty()) {
				q.add(lists.get(i).end());
			}else {
				if(q.peek()<=lists.get(i).start) {
					q.poll();
					q.add(lists.get(i).end());
				}else {
					q.add(lists.get(i).end());
				}
			}
			
		}
		System.out.print(q.size());
	}
	
}