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


[알고리즘풀이]

들어간 사람들의 이름과 나간 사람들의 이름을 따로 저장한다.

사전 역순으로 출력해야되기 때문에, Sort를 하고 들어간 사람들의 이름을 역순으로 순회한다.

이때, 나간 사람들의 이름과 겹치면 Pass 아니면 출력을 해준다.

( 나간 사람들도 Sort를 진행했으므로, 현재까지 Check된 나간 사람들을 나타내주는 int p 를 이용한다. )

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>

using namespace std;

int main(void) {
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int n;
	cin >> n;
	vector<string> v, k;
	for (int i = 0; i < n; i++) {
		string temp1, temp2;
		cin >> temp1 >> temp2;
		if (temp2 == "enter")
			v.push_back(temp1);
		else {
			k.push_back(temp1);
		}
	}
	sort(v.begin(), v.end());
	sort(k.begin(), k.end());
	bool flag = false;
	if (k.empty())
		flag = true;
	int p = k.size() - 1;
	for (int i = v.size() - 1; i >= 0; i--) {
		if (flag){
			cout << v[i] << '\n';
			continue;
		}
		if (v[i] != k[p])
			cout << v[i] << '\n';
		else{
			p--;
			if (p == -1)
				flag = true;
		}
	}

}

 

+ Recent posts