티스토리 뷰

728x90

https://www.acmicpc.net/problem/7785

 

7785번: 회사에 있는 사람

첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는

www.acmicpc.net


  • 해설 : 

상근이는 세계적인 소프트웨어 회사 기글에서 일한다. 이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다.

 

각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다.

 

상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성하시오.

 

 

 


  • 풀이 :

출입 시간이 현재 시간보다 빠르고, 퇴근 로그가 존재하지 않는 사람의 수를 세면 된다.

 

 

 


  • 소스코드 : 

 

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
#include<iostream>
#include<string>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main() {
    int N; cin >> N;
    map <stringint, greater<string>> s;
    map <stringint, greater<string>> ::iterator it;
    for (int i = 0; i < N; i++) {
        string name;
        string stat;
        cin >> name >> stat;
        if (stat.compare("enter"== 0) {
            s[name] = 1;
        }
        else {
            s[name] = 0;
        }
    }
    for (it = s.begin(); it != s.end(); it++) {
        if (it->second) {
            cout<<it->first<<"\n";
        }
    }
}
cs
320x100
댓글
© 2022 WonSeok, All rights reserved