https://www.acmicpc.net/problem/11000
import java.io.*;
import java.util.*;
public class Main {
static int N;
static class Lecture{
int start, end;
Lecture(int start, int end){
this.start = start;
this.end = end;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
Lecture[] list = new Lecture[N];
for(int i = 0; i < N; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
list[i] = new Lecture(start,end);
}
Arrays.sort(list, (l1, l2) -> l1.start != l2.start ? l1.start - l2.start : l1.end - l2.end);
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(list[0].end);
for(int i = 1; i < N; i++){
if(pq.peek() <= list[i].start){ // 안겹치는 경우
pq.poll(); // 현재있는 강의실에 지금 배정할 수업도 배정할수 있는것!
}
pq.offer(list[i].end);
}
System.out.print(pq.size());
}
}
Arrays.sort(lectures, (l1, l2) -> l1.start == l2.start ? l1.end - l2.end : l1.start - l2.start);
👉 즉 배정 순서를 가장 빠른 강의부터 해준것
가장 빠른(작은) 종료시간이 peek()에 오게됨