programmers 오픈채팅방 : programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
level2 의 2019 kakao blind recruitment 에 나온 문제입니다.
문제에서 요구하는대로 순차적으로 모든 문자열들을 검색하면서 uid에 맞는 nickname을 바꿔주면
시간초과가 발생할 것입니다.
이 문제는 record의 마지막까지 전부 다 읽은 후에 현재 유저의 '최종'닉네임만 알면
쉽게 해결할 수 있습니다.
모든 유저의 '최종' 닉네임을 알기 위해서 <키,값> 으로 이루어져 사용되는 map을 이용하여 문제를 해결했습니다.
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
map<string, string> m;
for(auto i : record){
string str = i;
string enter = "";
string uid = "";
string nickname = "";
int idx = 0;
while(str[idx] != ' ') enter += str[idx++];
idx++;
while(idx < str.size() && str[idx] != ' ') uid += str[idx++];
idx++;
if(enter.compare("Enter") == 0 || enter.compare("Change") == 0){
while(idx < str.size() && str[idx] != ' ') nickname += str[idx++];
m[uid] = nickname;
}
}
for(auto i : record){
string str = i;
string enter = "";
string uid = "";
int idx = 0;
while(str[idx] != ' ') enter += str[idx++];
idx++;
while(idx < str.size() && str[idx] != ' ') uid += str[idx++];
if(enter.compare("Change") == 0) continue;
if(enter.compare("Enter") == 0){
answer.push_back(m[uid]+"님이 들어왔습니다.");
}
else{
answer.push_back(m[uid]+"님이 나갔습니다.");
}
}
return answer;
}
'algorithm > programmers' 카테고리의 다른 글
programmers 튜플 (0) | 2020.12.11 |
---|---|
programmers 길 찾기 게임 (0) | 2020.12.11 |
Programmers 실패율 (0) | 2020.12.10 |
Programmers 가사 검색 (0) | 2020.12.09 |
Programmers 블록 이동하기 (0) | 2020.12.08 |