(cpp)Baekjoon 7785번 문제 ‘회사에 있는 사람’ - 자료 구조,해시를 사용한 집합과 맵

Baekjoon 7785번 문제 ‘회사에 있는 사람’ - 자료 구조,해시를 사용한 집합과 맵


문제

문제풀이

이름과 상태를 전부 입력 받아서 m[name]=state로 매핑한다. m[name]=true 또는 false인지 확인해서 true인 경우의 name을 출력한다. map은 기본적으로 key기준으로 오름차순정렬 되어 있으므로 greater 옵션을 추가하여 내림차순 정렬한다.

코드

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <string>
#include <map>
using namespace std;

int n,cnt;
string name, state;
map<string, bool,greater<string>> m;
int main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> name >> state;

		if (state == "enter") {
			m[name] = true;
		}
		else {
			m[name] = false;
		}
	}

	map<string, bool>::iterator it;
	for (it = m.begin(); it != m.end(); it++) {
		if (it->second) {
			cout << it->first << '\n';
		}
	}

}
  • map<key,value> : 각 노드가 key와 value 쌍으로 이루어진 트리
  • map이 배열처럼 되어 있는 것이 아니라 key를 지정해주면 그에 해당하는 value를 출력할 수 있음. 따라서, for문 으로 0부터 m의 size만큼 돌려보는 것이 아니고 ‘map<string,bool>::iterator it’를 통해 반복자를 지정해주어야 한다.
  • m[name]=state의 경우 it->first로 쓰면 name을 나타내고 it->second로 쓰면 state를 나타냄.
  • m[1],m[2].. 이런식으로 되어 있는게 아님