회사에 있는 사람
문제 링크: https://www.acmicpc.net/problem/7785
이름이 같을 경우는 없다고 하였으니 key값은 고유하다.
따라서, enter일 때 insert, leave 일 때 erase를 수행하고,
사전 역순이므로 정렬된 역순으로 출력한다.
그리고 출력 시에 endl으로 출력을 하면 시간 초과가 뜬다.
이유는 출력 함수의 끝을 알림으로 버퍼를 정리하는 기능을 하기 때문에 시간이 더 걸린다는 것이다.
따라서, 이 점에 유의하여 \n으로 구분한다.
-
정답 코드
#include<iostream> #include<set> using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); set<string> memberlist; int n; cin >> n; while (n--) { string name, stat; cin >> name >> stat; if (stat == "enter") memberlist.insert(name); else if (stat == "leave") memberlist.erase(name); } if(!memberlist.empty()) for (set<string>::reverse_iterator iter = memberlist.rbegin(); iter != memberlist.rend(); ++iter) cout << *iter << "\n"; return 0; }
'ProblemSolving' 카테고리의 다른 글
[BOJ] 1276_교각 놓기 (0) | 2021.02.07 |
---|---|
[BOJ] 10546_배부른 마라토너 (0) | 2021.02.06 |
[BOJ] 5397_키로커 (0) | 2021.02.04 |
[BOJ] 3085_사탕게임 (4) | 2021.02.03 |
[BOJ] 1074_Z (0) | 2021.02.02 |
최근댓글