티스토리 뷰
문제 링크
풀이
풀이는 간단하다.
map을 이용하였고 map의 "[ ]" operator 연산자로 insert와 update를 동시에 해주는 이점을 이용하였다.
(= key값이 중복이 안되는 점을 이용)
1) 선 처리 과정에서는 첫 글자만 보고 'C', 'E', 'L'로만으로 switch-case로 나눠서 진행
1.1)Change는 닉네임을 갱신
1.2)Enter는 answer 컨테이너에 id + "님이 들어왔습니다."를 넣어주는 동시에, 닉네임을 갱신
1.3)Leave는 answer 컨테이너에 id + "님이 나갔습니다."를 넣어준다.
2) 후 처리로 id에 해당되는 닉네임을 replace 해준다.
더보기
#include <string>
#include <vector>
#include <iostream>
#include <map>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
map<string, string> id_name;
// recode에서 uid를 다 뽑아오기(uid는 공통이므로)
for(string s : record)
{
int count;
string id;
string name;
switch(s[0])
{
case 'E':
count = s.find(" ", 6) - 6; // "Enter " 다음부터 " "찾아서 글자 길이 추출
id = s.substr(6, count); // id
name = s.substr(6+count+1); // nickname
id_name[id] = name; // insert to map
answer.push_back(id+"님이 들어왔습니다.");
break;
case 'L':
id = s.substr(6);
answer.push_back(id+"님이 나갔습니다.");
break;
case 'C':
count = s.find(" ", 7) - 7; // "Enter " 다음부터 " "찾아서 글자 길이 추출
id = s.substr(7, count); // id
name = s.substr(7+count+1); // nickname
id_name[id] = name; // change value of the key
break;
}
}
// 후 처리
for(string& s : answer) // 참조하여 id를 nickname으로 바꿔줌
{
int count = s.find("님");
string id = s.substr(0, count);
s.replace(0, count, id_name.find(id)->second);
}
return answer;
}
728x90
반응형
'Programmers Solutions > previous' 카테고리의 다른 글
[3차]방금그곡(2018 카카오 블라인드 채용) (0) | 2020.08.10 |
---|---|
후보키(2019 카카오 블라인드 채용) (0) | 2020.08.08 |
[1차] 캐시(2018 카카오 블라인드 채용) (0) | 2020.08.06 |
[1차] 프렌즈4블록(2018 카카오 블라인드 채용) (0) | 2020.08.06 |
[1차]뉴스 클러스터링(2018 카카오 블라인드 채용) (0) | 2020.08.06 |
댓글