https://www.acmicpc.net/problem/7785
값 두개를 비교해야 하고 둘다 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 |