https://www.acmicpc.net/problem/7785
7785번: 회사에 있는 사람
첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는
www.acmicpc.net
#include<iostream>
#include <map>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
cin >> n;
string name;
string record;
map<string, string, greater<>> records;
for (int i = 0; i < n; i++)
{
cin >> name >> record;
records[name] = record;
}
map<string, string>::iterator it;
for(it = records.begin(); it != records.end(); it++)
{
if(it->second == "enter")
{
cout << it->first << "\n";
}
}
}
record라는 맵은 <string, string>형태로
key값에 중복 없는 이름인 name이, value값에 record를 넣어준다
map에 삽입은 map[key] = value; 연산자를 사용하여
name에 출입 기록 record를 직접 넣어주면 된다
또한, 사전순의 역순으로 출력하라는 조건이 있으므로
greater<>을 사용하여 내림차순으로 정렬한다
그리고 모든 출입 기록 입력이 끝나면
map의 iterator를 사용하여 record ( = it.second, = value) 가 enter 로 남아있는 name ( = it.first, = key) 만 출력하면 된다
map의 key값은 중복 없이 고유한 값만 저장이 가능하다는 점과
map[key] = value; 연산자로 바로 삽입시킬 수 있는 것
map의 반복자로 map을 탐색할 수 있는 방법을 알면 쉽게 풀 수 있는 문제다
'> 코딩테스트' 카테고리의 다른 글
[백준] 28279 덱2 (C++) (2) | 2023.11.08 |
---|---|
[백준] 10816 숫자카드2 (C++) (1) | 2023.10.31 |
[백준] 2156 포도주 시식 (C++) (0) | 2023.08.09 |
[백준] 26069 붙임성 좋은 총총이 (C++) (0) | 2023.07.03 |
[백준] 4948 베르트랑 공준 (C++) (0) | 2023.06.24 |