티스토리 뷰

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

 

7785번: 회사에 있는 사람

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

www.acmicpc.net


map을 사용하여 key에는 이름, value에는 회사에 존재 여부를 기록합니다. 

enter -> map의 value로 1 저장

leave -> map의 value로 0 저장

 

map은 key 값을 기준으로 정렬을 할 수 있다. -> map<string, int, greater<string> > map;

 

마지막으로 출력 시에 map 처음부터 끝까지 iterator를 돌리면서 value가 1로 저장된 key 값을 출력한다.

#include <iostream>
#include <map>
#include <sstream>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n;
    (cin >> n).ignore();

    map<string, int, greater<string> > map;
    for (int i = 0; i < n; i++) {
        string line;
        getline(cin, line);
        stringstream ss(line);
        string s1, s2;
        ss >> s1 >> s2;
        if (s2 == "enter") {
            map[s1] = 1;
        } else if (s2 == "leave") {
            map[s1] = 0;
        }
    }

    for (auto iter = map.begin(); iter != map.end(); iter++) {
        if (iter->second == 1)
            cout << iter->first << '\n';
    }
}

 

참고

https://life-with-coding.tistory.com/305

 

Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
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