๊ณต๋ฐฑ์ด ํฌํจ๋ ๋ฌธ์์ด์ธ stringstream์ ์ฌ์ฉํ๋ ๋ฒ์ ์ฒ์ ๋ฐฐ์ ๋ค. ์ผ์ผ์ด if๋ฌธ์ ํตํด์ substr๋ก ๋น๊ต๋ฅผ ํ๊ณ ์ด๋ฅผ ํตํด Test Case๋ฅผ ํต๊ณผํ ๋ฐฉ๋ฒ์ ๊ตฌํ์ ํ์ผ๋ Time Problem์ผ๋ก ์คํจํ์๋ค. Stringstream์ ํตํด์ ๊ฐํธํ ์ํ๋ ๋จ์ด๋ฅผ ๋ฝ์๋ด๊ณ If ๋ฌธ์ ํ์ฉํด์ ์ํ๋ ๋ ผ๋ฆฌ๋ก ๊ตฌํ์ํฌ ์ ์์๋ค. Map ์ ๊ฒฝ์ฐ๋ insert(make_pair)์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ find("์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด")->second ์ด๋ ๊ฒ ์ ์ธํด์ ํ ๋น์ ํ์๋ค. ์ด์ ๋ ์ํ๋ ๋ฌธ์์ด์ indexํ ์์ผ์ ํ ๋น์ ํด๋ ๋ ๊ฒ ๊ฐ๋ค.
์ฌ์ค ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌ๊ธ์ ์กด์ฌํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค. ๊ทธ๋๋ ๋ฐฐ์ด๊ฑด ๋ฐฐ์ด ๊ฑฐ๋...
#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <map>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
map<string,string> map;
vector<string> sent;
// record์ ํฌ๊ธฐ๋งํผ ๋ฐ๋ณตํ๋ค.
for(int i =0 ; i < record.size() ; i++) {
string str[3];
string token;
// ๊ณต๋ฐฑ์ด ์๋ ๋ฌธ์์ด์ ์
๋ ฅ๋ฐ๊ธฐ ์ํ stringstream ์ ์ธ
stringstream ss(record[i]);
int count = 0;
// ๋ฌธ์์ด ss์ ํด๋นํ๋ ๊ฒ์ ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก token(string)์ ํด๋นํ๋ ๊ฒ์ด ์กด์ฌํ ๊ฒฝ์ฐ
// str ๋ฐฐ์ด์ ํด๋นํ๋ token์ ๋ด๋๋ค.
while(ss >> token) {
str[count++] = token;
}
// ๋ง์ฝ ์ฒ์ ๋ค์ด์ค๋ ๋จ์ด๊ฐ Enter์ธ ๊ฒฝ์ฐ
if(str[0] == "Enter") {
// sent ๋ฒกํฐ์๋ ๋ค์ด์จ ์์๋๋ก push_back์ ํด์ ๋๊ธฐ์์ผ ๋๋๋ค.
sent.push_back("๋์ด ๋ค์ด์์ต๋๋ค.");
// answer์๋ ์ด๋ฆ์ด ์๋ id๋ฅผ ๋จผ์ ์ ์ฅ์ํจ๋ค.
answer.push_back(str[1]);
// map์์ id์ ํด๋นํ๋ username์ ์ ์ฅ์ํค๋ ๋ฐฉ๋ฒ
map[str[1]] = str[2];
}
else if(str[0] == "Leave") {
// Leave์ ๊ฒฝ์ฐ๋ sent ๋ฒกํฐ์ push_back
sent.push_back( "๋์ด ๋๊ฐ์ต๋๋ค.");
// answer์ id๋ฅผ ์ ์ฅ์ํจ๋ค.
answer.push_back(str[1]);
}
else {
// Change์ ๊ฒฝ์ฐ ํด๋นํ๋ id์ ๋ณ๊ฒฝ๋ ์ด๋ฆ์ ํ ๋นํ๋ค.
map[str[1]] = str[2];
}
}
for(int i =0 ; i < answer.size() ; i++) {
// answer์ ๋์ ๋ id์ ํด๋นํ๋ username์ map์ ์ด์ฉํด์ ์นํ์ ํด์ค๋ค.
answer[i] = map[answer[i]] + sent[i];
}
return answer;
}
StringStream์๊ธฐ ์ด์ substr๋ก ๋ฌธ์์ด์ ๋ถ๋ฆฌํ์ ๋
#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <unordered_map>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
vector<int> space(2,0);
unordered_map<string,string> map;
int count = 0 ;
for(int i = 0 ; i < record.size() ; i++) {
for(int j = 0 ; j < record[i].size() ; j++) {
if(record[i][j] == ' ') space[count++] = j;
}
if(record[i][0] == 'E') {
string id = record[i].substr(space[0]+1, space[1]-space[0]-1);
string name = record[i].substr(space[1]+1, record[i].size()-space[1]-1);
if(map.find(id) != map.end())
map.find(id)->second = name;
else map.insert(make_pair(id, name));
answer.push_back(id + "๋์ด ๋ค์ด์์ต๋๋ค.");
} else if(record[i][0] == 'L') {
string id = record[i].substr(space[0]+1, record[i].size()-space[0]-1);
answer.push_back(id + "๋์ด ๋๊ฐ์ต๋๋ค.");
} else if(record[i][0] == 'C') {
string id = record[i].substr(space[0]+1, space[1]-space[0]-1);
string name = record[i].substr(space[1]+1, record[i].size()-space[1]-1);
map.find(id)->second = name;
}
count = space[0] = space[1] = 0;
}
for(int i =0 ; i < answer.size() ; i++) {
for(int j =0 ; j < answer[i].size() ; j++) {
if(answer[i][j] == ' ') {
string userid = answer[i].substr(0, j-6);
answer[i].replace(0,j-6, map.find(userid)->second);
}
}
}
return answer;
}