작성일 :

문제 링크

17930번 - Hanging Out on the Terrace

설명

테라스의 최대 수용 인원과 입장, 퇴장 기록이 주어질 때, 수용 인원을 넘겨 입장이 거절된 그룹이 몇 번 있었는지 구하는 문제입니다.


접근법

현재 테라스에 있는 사람 수를 변수 하나로 관리하며 순서대로 시뮬레이션하면 됩니다.
enter인 경우 현재 인원에 그룹 인원을 더했을 때 제한을 넘지 않으면 입장시키고, 넘으면 거절 횟수를 1 증가시킵니다.
leave인 경우에는 현재 인원에서 해당 수만큼 빼면 됩니다.



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
27
28
29
using System;

class Program {
  static void Main() {
    var first = Console.ReadLine()!.Split();
    var limit = int.Parse(first[0]);
    var x = int.Parse(first[1]);

    var cur = 0;
    var denied = 0;

    for (var i = 0; i < x; i++) {
      var parts = Console.ReadLine()!.Split();
      var type = parts[0];
      var p = int.Parse(parts[1]);

      if (type == "enter") {
        if (cur + p <= limit)
          cur += p;
        else
          denied++;
      } else {
        cur -= p;
      }
    }

    Console.WriteLine(denied);
  }
}

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
27
28
29
30
31
32
#include <bits/stdc++.h>
using namespace std;

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

  int limit, x;
  cin >> limit >> x;

  int cur = 0;
  int denied = 0;

  for (int i = 0; i < x; i++) {
    string type;
    int p;
    cin >> type >> p;

    if (type == "enter") {
      if (cur + p <= limit)
        cur += p;
      else
        denied++;
    } else {
      cur -= p;
    }
  }

  cout << denied << "\n";

  return 0;
}

Tags: 17930, BOJ, C#, C++, 구현, 백준, 시뮬레이션, 알고리즘

Categories: ,