[백준 17930] Hanging Out on the Terrace (C#, C++) - soo:bak
작성일 :
문제 링크
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;
}