Level 2. 오픈채팅방
2019년에 카카오에서 출제한 재밌는 문제였다.
각 유저의 닉네임은 가장 최근에 변경한 것으로 보여야하기 때문에, 기록을 확인하면서 정답을 수정하는 것보다는 기록을 한 번에 다 확인하고 정답을 한꺼번에 작성하는 것이 좋다.
이름 변경 명령이면 단순히 이름을 바꾸고, 입장/퇴장 명령이면 유저 아이디와 함께 출력할 정답 배열에 추가한다.
#include <iostream>
#include <vector>
#include <unordered_map>
#include <sstream>
#include <utility>
using namespace std;
vector<string> solution(vector<string> record)
{
vector<string> answer;
vector<pair<char, string>> op_uid;
unordered_map<string, string> uid_name;
for (string rec : record)
{
string op, uid, name;
istringstream iss(rec);
iss >> op >> uid >> name;
switch (op[0])
{
case 'E':
{
uid_name[uid] = name;
op_uid.emplace_back(pair<char, string>('E', uid));
break;
}
case 'L':
{
op_uid.emplace_back(pair<char, string>('L', uid));
break;
}
case 'C':
{
uid_name[uid] = name;
break;
}
}
}
for (pair<char, string>& pr : op_uid)
answer.emplace_back(uid_name[pr.second] + "님이 " +
(pr.first == 'E' ? "들어왔" : "나갔") + "습니다.");
return answer;
}
'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 2. 숫자 변환하기 (0) | 2023.03.22 |
---|---|
Level 2. 튜플 (0) | 2023.03.21 |
Level 2. 이진 변환 반복하기 (0) | 2023.03.19 |
Level 2. 최댓값과 최솟값 (0) | 2023.03.18 |
Level 2. 피로도 (0) | 2023.03.17 |