[BOJ] C++ 7785 회사에 있는 사람 - 해시 사용해보기

2023. 8. 24. 21:55알고리즘/문제풀이

 

7785번: 회사에 있는 사람

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

www.acmicpc.net

예제

4
Baha enter
Askar enter
Baha leave
Artem enter

ans : 
Askar
Artem

이름이라는 단일 데이터에 대해 빈번한 삽입, 검색, 삭제가 일어나므로 해시 셋이나 셋 자료구조를 사용하면 편하다. 출력 부분을 보면, 사전의 역순으로 출력하는 부분이 있으니 셋 stl을 이용해서 구현했다. 딱히 예외처리 할 부분도 없고 편한 문제다.

/** 해시 7785 회사에 있는 사람 **/
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int N;
    cin >> N;

    set<string, greater<string>> s;

    for (int i = 0; i < N; i++)
    {
        string name, status;
        cin >> name >> status;
        if (status == "enter")
        {
            s.insert(name);
        }
        else
        {
            if (s.find(name) != s.end())
                s.erase(name);
        }
    }

    for (auto x : s)
        cout << x << "\n";
}