코딩성장스토리

백준 7785번 : 회사에 있는 사람(역방향반복자 ,반복자) 본문

백준 코딩

백준 7785번 : 회사에 있는 사람(역방향반복자 ,반복자)

까르르꿍꿍 2022. 1. 26. 15:45

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

 

7785번: 회사에 있는 사람

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

www.acmicpc.net

 

이 문제는 set을 이용해서 넣었다 뺏다 하면서 푸는 문제이다 다른 문제에 비해 비교적 쉬운 문제라 구현하는데 에 문제는 없었다. 근데 여기서 set과 반복자 역박향 반복자를 처음 알게 되었다.

set에 begin 함수와 end함수는 그냥 반복자 iterate로 할 수 있지만

rebegin 와 rend 같이 역으로 가는 함수는 역방향 반복자 reverse_iterator 를 사용해야 했다.

물론 그냥 auto 변수를 이용해서 변수형을 스스로 맞추게 하면 편하게 하지만 반복자를 어떻게 써야하는지 알고 가는 것이 중요하다 생각한다잉

코드를 보자잉

#include <iostream>
#include <set>
#include <string>
using namespace std;
int main(){
    int n;
    set<string> save;
    cin>>n;
    for(int i=0;i<n;i++){
        string ch;
        string s;
        cin>>s;
        cin>>ch;
        if(ch=="enter"){
            save.insert(s);
        }
        if(ch=="leave"){
            save.erase(s);
        }
    }
    for (set<string>::reverse_iterator iter = save.rbegin(); iter != save.rend(); iter++) {    //역방향 반복자
	    cout << *iter << "\n";
    }

}

'백준 코딩' 카테고리의 다른 글

백준 1759번: 암호 만들기  (0) 2022.01.28
백준 1764번:듣보잡  (0) 2022.01.27
백준 2022번:사다리  (0) 2022.01.25
백준 1561번: 놀이 공원  (0) 2022.01.25
백준 1939번:중량제한  (0) 2022.01.23