코테 준비-문제풀기

백준 7785

FireStone 2019. 9. 18. 13:59

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

 

7785번: 회사에 있는 사람

문제 상근이는 세계적인 소프트웨어 회사 기글에서 일한다. 이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다. 각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다. 상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성

www.acmicpc.net

값 두개를 비교해야 하고 둘다 string값으로 하고 싶어서 우선 map을 사용했다.

먼저 처음에 사전역순으로 출력하라는 걸 못봐서 그냥 냈는데..

사전 역순으로 출력하기 위해서는 greater를 사용하면 된다.

 

우선 code부터 ㄱㄱ

 

#include <iostream>
#include <string>
#include <map>


using namespace std;

int main(int argc, const char * argv[]) {
    // insert code here...
    string name;
    string state;
    int TestCase=0;
    
    map<string, string, greater<string>>::iterator it;
    map<string,string,greater<string>> map;
    
    cin>>TestCase;
    for(int i=0;i<TestCase;i++){
        cin>>name>>state;
        map[name]=state;
    }
    
    for(it =map.begin(); it != map.end();it++){
       if(it->second == "enter")
            cout<< it->first<<"\n";
    }
      return 0;
}

 

 

처음에는 map사용시 key가 중복이 되면 이후 중복된 key를 지닌 value가 안들어오는 줄 알고

이런식으로 이후에 leave라는 값이 들어오면 아예 key값을 삭제하는 식으로 했었는데 

나중에 보니 중복된 key값이 들어오면 덮어씌우게 된다는 걸 알았다. 

바뀐건가..

무튼 그래서 그냥 덮어씌우는 걸 이용하기로 하고

map의 second인 value가 enter인것만 출력하도록 하면  끝!

 

'코테 준비-문제풀기' 카테고리의 다른 글

프로그래머스-스택 '탑'문제  (0) 2020.01.08
프로그래머스-정렬문제 k번째 수  (0) 2020.01.07
2193 Dynamic -이친수 구하기  (0) 2019.06.02
1260 DFS BFS  (1) 2019.05.29
11399 greedy  (0) 2019.05.23