문제

문제 링크

어떻게 접근할 것인가?

  • set으로 문제를 접근해도 되고 hash를 활용해도 된다.
  • c++의 입출력을 이용하는 것은 무조건 최소한으로 해야한다.(이것때문에 날린시간이 몇시간인지ㅠㅠ)

set 활용 코드

#include <cstdio>
#include <algorithm>
#include <map>
#include <iostream>
#include <set>

using namespace std;

int n;
string name, c;
set<string, greater<string> > s;

int main(){
    cin >> n;
    while(n--){
        cin >> name >> c;
        if(c[0] == 'e')s.insert(name);
        else s.erase(name);
    }
    for(auto itr = s.begin(); itr != s.end(); ++itr) cout << *itr << '\n';    
}

map 활용 코드

#include <cstdio>
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <map>

using namespace std;

int main(){
    int n;
    vector<string> v, in;
    map<string, int> m;
    map<string, int>::iterator iter;
    string name, c;
    scanf("%d", &n);
    while(n--){
        cin >> name >> c;
        if(c[0] == 'e') {
            if(m.find(name)->second == m.end()->second) m.insert(make_pair(name, 1));
            else m.find(name)->second = 1; 
        }
        else m.find(name)->second = 0;
    }
    for (iter = m.begin(); iter != m.end(); ++iter){
        if(iter->second == 1) in.push_back(iter->first);
    }
    sort(in.begin(), in.end(), greater<string>());
    for(int i = 0; i < in.size(); i++) cout << in[i] << "\n";
}