[프로그래머스 42888] 오픈채팅방(2019 카카오 블라인드 채용)
- 2 minsCATEGORY : 문자열 처리, 해싱
DIFFICULTY : LEVEL 2
LANGUAGE : C++
LINK : PROGRAMMERS 오픈채팅방
Comment
처음에 map 라이브러리를 사용하였지만unordered_map을 사용하여 시간복잡도를 줄였다. 또 “Enter”, “Leave”, “Change”와 같은 문자열을 그대로 비교하는 것이 아니라 앞글자만 비교하여 시간 소모를 더 줄였다.
map과 unordered_map의 차이에 대한 설명은 여기로
map으로의 저장은 ‘입장’과 ‘변경’일 때만 일어나고, answer로의 저장은 ‘입장’, ‘퇴장’일 때만 일어나는 것을 알 수 있다.
Python으로 짜면 훨씬 짧다.
#include<iostream>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
void Tokenize(const string& s, vector<string>& tok) {
string pt = "";
for (char c : s) {
if (c != ' ') {
pt += c;
}else {
tok.push_back(pt);
pt.clear();
}
}
tok.push_back(pt);
}
vector<string> solution(vector<string> record) {
vector<string> answer;
unordered_map<string, string> mp;
vector<string> tok;
// 1. 맵 업데이트
for (string s : record) {
Tokenize(s, tok);
if (tok[0][0] == 'E') {
mp[tok[1]] = tok[2];
answer.push_back(tok[1]);
}
else if (tok[0][0] == 'C') {
mp[tok[1]] = tok[2];
}
else {
answer.push_back(tok[1]);
}
tok.clear();
}
// 2. 문자열 형식에 맞게 answer 갱신
int i = 0;
for (string s : record) {
if (s[0] == 'E') {
answer[i] = mp[answer[i]] + "님이 들어왔습니다.";
i++;
}
else if (s[0] == 'L') {
answer[i] = mp[answer[i]] + "님이 나갔습니다.";
i++;
}
}
return answer;
}