
- Solved.ac 기준 실버 4
- 사용언어 C++
문제 해석
- map을 써서 입력을 string과 int로 구분하여 입력
문제 풀이
- 입력 처리: 첫 번째 줄에서 출입기록의 개수 q를 입력받고, 다음 q 줄에서 각 출입기록을 입력받습니다.
- 출입 상태 추적: 들어간 기록(+)이면, 해당 직원의 상태를 증가시킵니다. 상태가 처음이라면 1로 초기화합니다. 나온 기록(-)이면, 해당 직원의 상태가 0보다 크면 감소시킵니다. 그렇지 않으면, 야근 횟수를 증가시킵니다.
- 퇴근시간까지 나오지 않은 경우 처리: 모든 직원의 상태를 확인하여 0보다 큰 값이 남아있는 경우, 해당 값을 야근 횟수에 더합니다.
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int q;
cin >> q;
map<string, int> arr;
int cnt = 0;
for (int i = 0; i < q; i++) {
string name, action;
cin >> name >> action;
if (action == "+") {
if (arr.find(name) != arr.end()) {
arr[name]++;
}
else {
arr[name] = 1;
}
}
else if (action == "-") {
if (arr.find(name) != arr.end() && arr[name] > 0) {
arr[name]--;
}
else {
cnt++;
}
}
}
for (auto& entry : arr) {
if (entry.second > 0) {
cnt += entry.second;
}
}
cout << cnt;
return 0;
}