키워드
- 최대한 적은 수의 강의실을 사용하여 모든 강의가 이루어지게 하고 싶다.
구현
- 우선 순위 큐를 이용하여 구현한다.
static class Lecture
number
- 강의 번호
startTime
- 강의 시작 시각
endTime
- 강의 종료 시각
lectureClassQueue
- 강의가 끝나는 시각의 오름차순 정렬
- 강의 데이터를 강의 시작 시각을 기준으로 오름차순 정렬한다.
- 강의 배열을 돌면서 현재 존재하는 강의실에 가장 빨리 끝나는 강의실에 넣을 수 있으면 넣는다.
- 만약 넣을 수 없다면, 강의실을 하나 추가한다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class java_1374 {
static int N;
static List<Lecture> lectureList;
static class Lecture implements Comparable<Lecture> {
int number;
int startTime;
int endTime;
public Lecture(int number, int startTime, int endTime) {
this.number = number;
this.startTime = startTime;
this.endTime = endTime;
}
@Override
public int compareTo(Lecture o) {
return this.startTime - o.startTime;
}
}
static int solution() {
int result = 0;
Collections.sort(lectureList);
// 강의실에 강의를 추가하는 경우
// 강의실을 추가하는 경우
// -> 가장 빨리 끝나는 강의 시각 > 추가하려는 강의의 시작 시각
PriorityQueue<Integer> lectureClassQueue = new PriorityQueue<>();
lectureClassQueue.add(0);
for (int i = 0; i < N; i++) {
Lecture lecture = lectureList.get(i);
int classEndTime = lectureClassQueue.peek();
// 강의실에 강의를 추가하는 경우
if (!(classEndTime > lecture.startTime)) {
lectureClassQueue.poll();
}
lectureClassQueue.add(lecture.endTime);
}
result = lectureClassQueue.size();
return result;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
lectureList = new ArrayList<>();
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int number = Integer.parseInt(st.nextToken());
int startTime = Integer.parseInt(st.nextToken());
int endTime = Integer.parseInt(st.nextToken());
lectureList.add(new Lecture(number, startTime, endTime));
}
int result = solution();
System.out.println(result);
br.close();
}
}
Uploaded by N2T
'Coding Test > BOJ' 카테고리의 다른 글
[BOJ/JAVA] 1991번: 트리 순회 (0) | 2023.01.12 |
---|---|
[BOJ/JAVA] 12764번: 싸지방에 간 준하 (0) | 2023.01.10 |
[BOJ/JAVA] 7662번: 이중 우선순위 큐 (0) | 2023.01.10 |
[BOJ/JAVA] 1781번: 컵라면 (0) | 2023.01.10 |
[BOJ/JAVA] 1459번: 걷기 (0) | 2022.12.11 |