아이디에 따른 닉네임 정보를 유지하는 문제이다.
문제해결 전략
아이디는 고유하기 때문에 아이디에 따른 닉네임 정보를 저장하면 된다.
이 과정을 쉽게 하기 위해 map 자료구조를 이용하였다.
map에 키값으로 아이디를 value 값으로 닉네임을 저장한다.
그리고 반환을 위해 명령어와 아이디만 저장하고, 반환할 때는 저장된 아이디를 기반으로 map에서 값을 찾아내면 된다.
명령어에 따른 기능
코드
#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
map<string, string> m; // 아이디, 닉네임
vector<pair<string,string>> v; // 명령어, 아이디
for(int i=0;i<record.size();i++){
string abc[3];
string tmp = "";
int flag = 0;
for(int j=0;j<record[i].size();j++){
if(record[i][j] == ' '){
abc[flag] = tmp;
tmp = "";
flag++;
}else
tmp += record[i][j];
}
abc[flag] = tmp;
if(abc[0] == "Enter"){
v.push_back(make_pair("들어왔습니다.",abc[1]));
if(m.find(abc[1]) == m.end()){
m.insert(make_pair(abc[1],abc[2]));
}else{
m[abc[1]] = abc[2];
}
}else if(abc[0] == "Change"){
m[abc[1]] = abc[2];
}else{
v.push_back(make_pair("나갔습니다.",abc[1]));
}
}
for(int i=0;i<v.size();i++){
string str = "";
str += m[(v[i].second)];
str += "님이 ";
str += v[i].first;
answer.push_back(str);
}
return answer;
}
출처 : https://programmers.co.kr/learn/courses/30/lessons/42888