백준 7785 회사에 있는 사람 / C++

이유참치·2025년 12월 15일

백준

목록 보기
111/248

문제 : 7785

풀이 point

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;
}
profile
임아리 - 대학생

0개의 댓글