[c++] 백준 7785번 회사에 있는 사람

알감자·2022년 5월 4일
0

백준알고리즘

목록 보기
35/52

#7785

문제

상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성하시오.

입력

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

회사에는 동명이인이 없으며, 대소문자가 다른 경우에는 다른 이름이다. 사람들의 이름은 알파벳 대소문자로 구성된 5글자 이하의 문자열이다.

출력

현재 회사에 있는 사람의 이름을 사전 순의 역순으로 한 줄에 한 명씩 출력한다.

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

bool cmp(pair<string, string>& vec1, pair<string, string>& vec2)
{
	if (vec1.first == vec2.first)
		return vec1.second > vec2.second;

	return vec1.first > vec2.first;
}

int main()
{
	freopen("test.txt", "r", stdin);
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n;
	cin >> n;

	map<string, string> m;
	string name, log;
	for (int i = 0; i < n; i++)
	{
		cin >> name >> log;
		m[name] = log;
	}

	vector<pair<string, string>> map_vec(m.begin(), m.end());

	sort(map_vec.begin(), map_vec.end(), cmp);

	for (auto x : map_vec)
	{
		if (x.second == "enter")
			cout << x.first << "\n";
	}

}

map을 선언할 때 map<string, string, greater<>> 하면 역순으로 저장된다는데 greater<> 에서 계속 오류가 나서 다른 방식으로 풀었다.

+) #include 을 하면 greater 사용가능

map을 vector로 저장해준다음 cmp함수로 역순으로 sorting해주고 vector의 second인자가 enter일 때만 first인자를 출력해주었다.
map이 동일한 key 값이 들어오면 덮어씌워진다는 점을 배웠다.

0개의 댓글