알고리즘 모음(C++)

백준 7785 - 회사에 있는 사람(C++) 본문

백준

백준 7785 - 회사에 있는 사람(C++)

공대생의 잡다한 사전 2023. 12. 14. 22:31

문제 링크입니다. https://www.acmicpc.net/problem/7785

7785번: 회사에 있는 사람

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

www.acmicpc.net

map을 사용해, enter문자열이 입력된다면 값을 추가, leave문자열이 들어온다면 이름을 찾은 뒤 삭제해주면 됩니다.

map을 찾는 이유는 n의 값이 2,000,000이기에 for문을 사용한다면 시간초과가 생기기 때문입니다.


자세한 것은 코드를 참고해주세요.

#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include <vector>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>
#include <map>

using namespace std;

int N;
map<string, int> people;
vector<string> name;

int main() {
	cin.tie(0);
	cout.tie(0);
	cin >> N;
	for(int i = 1; i <= N; i++){
		string x, y;
		cin >> x >> y;
		if(y == "enter"){
			people.insert({x, 1});
		}
		else{
			if(people.find(x) != people.end()){
				people.erase(people.find(x));
			}
		}
	}
	map<string, int> ::iterator k;
	for(k = people.begin(); k != people.end(); k++){
		name.push_back(k->first);
	}
	for(int i = name.size()-1; i >= 0; i--){
		cout << name[i] << "\n";
	}
	return 0;
}


질문 및 조언은 댓글을 남겨주세요.