Enter
, Leave
, Change
이 세가지가 있음Leave
는 그리 중요치 않음Leave
단계에서는 유저 아이디가 바뀌지 않음잘못된 입력은 주어지지 않는다
이다!입력 배열 = record
Leave
가 아닌 경우, 닉네임을 업데이트함#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
#define STATE 0
#define UID_VALUE 1
#define NICKNAME 2
#define ENTER_STATE "Enter"
#define LEAVE_STATE "Leave"
#define CHANGE_STATE "Change"
// Map, Key: UID, Value: NickName
unordered_map<string, string> username_map;
void print_map() {
for (auto i = username_map.begin(); i != username_map.end(); i++) {
cout << i->first << " " << i->second << endl;
}
}
vector<string> parse_each_record(string record) {
vector<string> parsed;
string tmp = "";
for (int i = 0; i < record.length(); i++) {
if (record[i] != ' ') {
tmp += record[i];
} else {
parsed.push_back(tmp);
tmp = "";
}
}
if (tmp != "") {
parsed.push_back(tmp);
}
return parsed;
}
void update_each_record(string record) {
vector<string> parsed = parse_each_record(record);
if (parsed[STATE] != LEAVE_STATE) {
// Case 1. Initial Enter
if (username_map.find(parsed[UID_VALUE]) == username_map.end()) {
// Add
username_map.insert(make_pair(parsed[UID_VALUE], parsed[NICKNAME]));
} else {
// Case 2. Already OUT -> and re-enter[Nickname Change]
username_map[parsed[UID_VALUE]] = parsed[NICKNAME];
}
}
}
vector<string> solution(vector<string> record) {
vector<string> answer;
// Update Record
for (string each_record : record) {
update_each_record(each_record);
}
// Print out
for (string each_record : record) {
vector<string> parsed = parse_each_record(each_record);
if (parsed[STATE] == ENTER_STATE) {
answer.push_back(username_map[parsed[UID_VALUE]] + "님이 들어왔습니다.");
} else if (parsed[STATE] == LEAVE_STATE) {
answer.push_back(username_map[parsed[UID_VALUE]] + "님이 나갔습니다.");
}
}
return answer;
}