#include <string>
#include <vector>
#include <map>
#include <sstream>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
vector<pair<string, string>> result(record.size());
map<string, string> names;
for(int i = 0; i < record.size(); i++)
{
string str[3];
string token;
stringstream ss(record[i]);
int index = 0;
while(ss >> token)
str[index++] = token;
if(str[0] == "Enter")
{
names[str[1]] = str[2]; //코드의 이름을 변경
result[i].first = str[1]; //코드를 넣는다.
result[i].second = "님이 들어왔습니다.";
}
else if(str[0] == "Leave")
{
result[i].first = str[1];
result[i].second = "님이 나갔습니다.";
}
else if(str[0] == "Change")
names[str[1]] = str[2]; //코드의 이름을 변경
}
for(int i = 0 ; i < result.size(); i++)
{
if(result[i].first != "")
answer.push_back(names[result[i].first] + result[i].second);
}
return answer;
}
풀이
- 각각의 실행할 것, 코드이름, 유저이름을 빼내어서 실행별로 판단해준다.
- enter에서는 유저이름을 변경해준다. 이때 map에 코드이름을 키로하고 유저이름을 넣어준다.
그리고 vector 답안에 넣을 배열을 만들어주고 코드이름과 "님이 들어왔습니다."를 저장해준다. - Leave에서는 코드이름과 "님이 나갔습니다."를 저장해준다.
- Change에서는 코드이름에서 유저이름을 변경만 해준다.
- 다 저장 후에 저장했던 result벡터에서 코드이름(키값)을 map에서 찾아 유저이름을 대입하고
들어오고 나간것을 표시해준다.
처음에는 substr로 직접 계산했으나 길이를 잘 계산을 못한나머지 틀렸는데 stringstream을 사용하여
string인 것을 하나씩 띄어쓰기 단위로 넣어주어 빠르게 계산을 하게되었다.
도움 사이트 : eunchanee.tistory.com/78 word.tistory.com/24 chbuljumeok1997.tistory.com/42
더보기
검색용
문자열가져오기, stringstream, 띄어쓰기, string나누기, string자르기
'Algorithm > Programmers' 카테고리의 다른 글
[C++] 프로그래머스 등굣길 DP (0) | 2021.05.10 |
---|---|
[C++] 프로그래머스 보석 쇼핑 2020카카오인턴십 [미완] (0) | 2021.05.10 |
[C++] 프로그래머스 가장먼노드 BFS (0) | 2021.05.09 |
[C++] 프로그래머스 수식최대화 2020카카오인턴십 (0) | 2021.05.06 |
[C++] 프로그래머스 여행경로 DFS/BFS (0) | 2021.05.06 |