Coding_Test 연습/Programmers
[프로그래머스] (C++) LV2 오픈채팅방
Codetesing
2022. 4. 28. 12:22
C++에는 split이 없어서 입력을 처리하는데 더 오래 걸린거 같다.
실제 코테에선 이런 문제는 python을 써서 풀 것 같다.
입력을 제외하면 구현은 딱히 어렵지 않다. map을 써서 hash로 id name을 구별 하면 된다.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <utility>
using namespace std;
vector<string> TRANS_RECORD(string s)
{
vector<string> temp;
int rev = 0;
for (int i = 0; i < s.size(); i++)
if (s[i] == ' ')
{
temp.push_back(s.substr(rev, i));
rev = i + 1;
break;
}
if (temp[0] == "Leave")
temp.push_back(s.substr(rev));
else
for(int i = 0; i < s.size() - rev; i++)
if (s[rev + i] == ' ')
{
temp.push_back(s.substr(rev, i));
temp.push_back(s.substr(rev + i + 1, s.size() - rev - i - 1));
break;
}
return temp;
}
vector<string> solution(vector<string> record) {
vector<string> answer;
vector<vector<string>> translated_record;
map<string, string> user;
for (int i = 0; i < record.size(); i++)
translated_record.push_back(TRANS_RECORD(record[i]));
for (int i = 0; i < translated_record.size(); i++)
{
if (translated_record[i][0] != "Leave")
{
if (user.find(translated_record[i][1]) == user.end())
user.insert(pair<string, string>(translated_record[i][1], translated_record[i][2]));
else
user[translated_record[i][1]] = translated_record[i][2];
}
}
for (int i = 0; i < translated_record.size(); i++)
{
if (translated_record[i][0] == "Enter")
answer.push_back(user[translated_record[i][1]] + "님이 들어왔습니다.");
else if(translated_record[i][0] == "Leave")
answer.push_back(user[translated_record[i][1]] + "님이 나갔습니다.");
}
return answer;
}
int main()
{
vector<string> temp = { "Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan" };
solution(temp);
}