작성일 :

문제 링크

30019번 - 강의실 예약 시스템

설명

예약 요청이 시작 시각 오름차순으로 주어질 때, 각 요청의 수락 여부를 판단하는 문제입니다.


접근법

요청이 시작 시각 순서로 주어지므로, 강의실마다 마지막으로 수락한 예약의 종료 시각만 저장하면 됩니다.
시작 시각이 마지막 종료 시각 이상이면 YES로 수락하고 종료 시각을 갱신합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Text;

class Program {
  static void Main() {
    var parts = Console.In.ReadToEnd().Split();
    var idx = 0;
    var n = int.Parse(parts[idx++]);
    var m = int.Parse(parts[idx++]);

    var last = new int[n + 1];
    var sb = new StringBuilder();
    for (var i = 0; i < m; i++) {
      var k = int.Parse(parts[idx++]);
      var s = int.Parse(parts[idx++]);
      var e = int.Parse(parts[idx++]);

      if (s >= last[k]) {
        last[k] = e;
        sb.AppendLine("YES");
      } else sb.AppendLine("NO");
    }

    Console.Write(sb);
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int n, m; cin >> n >> m;
  vector<int> last(n + 1, 0);
  for (int i = 0; i < m; i++) {
    int k, s, e; cin >> k >> s >> e;
    if (s >= last[k]) {
      last[k] = e;
      cout << "YES\n";
    } else cout << "NO\n";
  }

  return 0;
}