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

+ Recent posts