반응형
문제는 다음과 같습니다.
https://www.acmicpc.net/problem/7785
7785번: 회사에 있는 사람
첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는
www.acmicpc.net
풀이 코드는 다음과 같습니다.
#include <iostream>
#include <string>
#include <map>
#include <algorithm>
using namespace std;
int main() {
cin.tie(0);
ios_base::sync_with_stdio(false);
long long n;
cin>>n;
string name,comm;
map<string,string,greater<>>m;
for(long long i{0};i<n;i++)
{
cin>>name>>comm;
m[name]=comm;
}
for(auto a : m){
if(a.second=="enter")
cout<<a.first<<"\n";
}
return 0;
}
10의 6 제곱이나 되는 큰 배열을 일일이 누가 나갔고 들어왔는지 매번 찾을 수 없기 때문에 map을 사용해서 업데이트하는 방식으로 구현했습니다. 또한 사전 순의 역순으로 출력하라고 했으므로 내림차순이 되도록 map에 greater를 넣어주었습니다.
map에 익숙하지 않다면 쉽게 해결하기 어려운 문제였다고 생각합니다.
반응형
'백준 문제풀이' 카테고리의 다른 글
14425 번 : 문자열 집합 (0) | 2023.08.29 |
---|---|
1735 번 : 분수 합 (0) | 2023.07.19 |
13241 번 : 최소공배수 (0) | 2023.07.14 |
9665 번 : 돌 게임 (0) | 2023.06.23 |
1935 번 : 후위표기식2 (0) | 2023.06.07 |