첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000)
이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109)
강의실의 개수를 출력하라.
이건 되게 간단한 문제였는데
객체 비교하는 표현이 간단한 방법을 발견해서 기록용이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
class Class {
int start, end;
Class(int start, int end) {
this.start = start;
this.end = end;
}
}
public class Main {
static Class[] classes;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
classes = new Class[N];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
classes[i] = new Class(start, end);
}
Arrays.sort(classes, (o1, o2) -> o1.start == o2.start ? o1.end - o2.end : o1.start - o2.start);
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(classes[0].end);
for (int i = 1; i < N; i++) {
if (pq.peek() <= classes[i].start) {
pq.poll();
}
pq.offer(classes[i].end);
}
System.out.println(pq.size());
}
}
- 자기 자신과 매개변수 객체를 비교한다.
- compareTo
static class Class implements Comparable<Lecture> {
int start, end;
Class(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public int compareTo(Lecture o) {
if (start == o.start)
return end - o.end;
return start - o.start;
}
}
- 두 매개변수 객체를 비교한다.
- compare
Arrays.sort(arr, new Comparator<int[]>() {
public int compare(Class o1, Class o2) {
if(o1.start == o2.start) return o1.end - o2.end;
return o1.start - o2.start;
}
});
내가 이번에 사용한 방식으로 Arrays.sort()
의 매개변수로 compare
함수를 넘겨준다.
이번에는 compare
함수를 따로 만들지 않고,
Arrays.sort()
안에서 바로 compare
함수를 구현하는 식으로 구현했다.
Arrays.sort(classes, (o1, o2) -> o1.start == o2.start ? o1.end - o2.end : o1.start - o2.start);