[白準/11000]教室の手配(Java)
Question
問題の説明
Solution
プールアクセス方法
講義の質問をできるだけ多くして~->「終わる時間は昇順に並べて」という答えは間違っています!
授業中の空き時間を最小化する=授業後と次の授業開始時間の間隔を小さくする
クラス時間昇順->クラス情報オブジェクト(Session Class)を作成して優先順位キューに入れ、1つずつスキップします
授業後の時間を優先キューで管理し、授業をより迅速に理解できるようにします.
正しいコード
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static class Session implements Comparable<Session> {
int start, end;
public Session(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public int compareTo(Session o) {
// 시작시간 오름차순
if (Integer.compare(this.start, o.start) == 0) {
// 시작시간이 같다면, 종료시간 오름차순
return Integer.compare(this.end, o.end);
}
return Integer.compare(this.start, o.start);
}
}
static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.valueOf(br.readLine());
// 시간시간 오름차순 순서대로 강의 담음
PriorityQueue<Session> sessions = new PriorityQueue<Session>();
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int start = Integer.valueOf(st.nextToken());
int end = Integer.valueOf(st.nextToken());
sessions.add(new Session(start, end));
}
// 강의실 개수 변수 : 1개로 시작
int classCnt = 1;
// 강의실별 끝나는 시간을 저장하는 큐 : 빨리 끝나는 강의싱이 우선순위 높음
// 큐의 사이즈 = 오픈한 강의실 개수
PriorityQueue<Integer> endQueue = new PriorityQueue<>();
// 첫 강의실에서 진행하는 강의의 끝나는 시간 넣음
endQueue.add(sessions.poll().end);
// 모든 강의가 강의실에 들어갈 때 까지
while (!sessions.isEmpty()) {
Session current = sessions.poll();
// 제일 빨리 끝나는 강의실의 종료 시간이 현대 시작해야할 강의보다 빠르면
if (endQueue.peek() <= current.start) {
// 해당 강의실 수업 종료
endQueue.poll();
} else {
// 제일 빨리 끝나는 강의보다 시작 시간이 더 빠르면
// 새로운 강의실 오픈
classCnt++;
}
// 수업 종료한 강의실 || 새로 오픈한 강의실에 강의 넣음
endQueue.add(current.end);
}
bw.write(classCnt + "\n");
bw.flush();
bw.close();
}
}
Reference
この問題について([白準/11000]教室の手配(Java)), 我々は、より多くの情報をここで見つけました https://velog.io/@hyunjkluz/백준11000-강의실-배정-Javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol