set or map을 활용하여 풀 수 있다.
enter일 경우에는 출근표시, leave일 경우에는 퇴근표시를 한다.
출력이 사전 순의 역순이다.
C++의 경우 set or map을 활용하면 자동으로 사전 순 출력이다.(Red-Black Tree구조이기 때문) 그러므로 역으로 출력해주어야한다.
unordered_set or map의 경우에는 역순 정렬 후 출력해주면 된다.
//백준 7785, 회사에 있는 사람
#include <iostream>
#include <map>
std::map<std::string, bool> map;
int main(){
int N;
std::cin >> N;
std::string name, state;
for(int i{0}; i<N; ++i){
std::cin >> name >> state;
if(map.find(name) != map.end()){
if(state == "enter") map[name] = 1;
else map[name] = 0;
}
else{
if(state == "enter") map[name] = 1;
else map[name] = 0;
}
}
for(auto it{map.rbegin()}; it != map.rend(); ++it){
if(it->second == 1) std::cout << it->first << '\n';
}
return 0;
}