문자열을 다루는 문제이다.
LV2 !! 문제 !! 지만 사실 문자열이라는 주제에 한정해서는
LV이라는게 그렇게 중요한가..? 싶기도 하다.
아무래도 역시나 문제를 풀면서 느끼는 것은
아 진짜 python 갈아타야 하나..하는 것이다.
'python 이면은 split() 쓰면 이거 다 나눠지고 편하게 저장해서 바로 문자열 이케 뽑아서 할 수 있는거 아냐??'
하는 생각이 계속 머리를 맴돈다..
일단은 그래도 꾸역꾸역 C++로 문제를 푸는 나, 제법 의리가 있다.
각설하고 문제에 대해 얘기하자면, 그냥 위에 나온 그대로다
잘 나눠서 저장하고 잘 뽑아서 쓰자.
uid는 고정값임을 이용해서
map 자료구조를 이용해 uid 값을 계속 덮어쓰기했다.
그것 외에는 딱히..
#include <string>
#include <vector>
#include <map>
using namespace std;
map<string, string> m;
vector<string> act;
vector<string> uid;
void func(string);
vector<string> solution(vector<string> record) {
vector<string> answer;
for(int i=0;i<record.size();i++){
func(record[i]);
}
for(int i=0;i<act.size();i++){
string s;
if(act[i]=="Enter"){
s = m[uid[i]]+"님이 들어왔습니다.";
}
if(act[i]=="Leave"){
s = m[uid[i]]+"님이 나갔습니다.";
}
if(s!="") answer.push_back(s);
}
return answer;
}
void func(string s){
vector<int> v;
int k=0;
while(s.find(' ',k)!=string::npos){
k=s.find(' ',k);
v.push_back(k);
k++;
}
string act1 = s.substr(0,v[0]);
act.push_back(act1);
string uid1;
if(act1=="Leave"){
uid1 = s.substr(v[0]+1);
uid.push_back(uid1);
}
else {
uid1 = s.substr(v[0]+1,v[1]-v[0]-1);
uid.push_back(uid1);
}
if(act1!="Leave"){
string name = s.substr(v[1]+1);
m[uid1]=name;
}
v.clear();
}