본문 바로가기
Programming Solve/프로그래머스

프로그래머스 - 오픈 채팅방 / C++

by msm1029 2022. 4. 16.
반응형

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42888

 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

 

 

풀이

record 배열의 문자열들을 단어별로 파싱한 뒤 unordered_map을 이용하여 uid와 닉네임을 갱신해준다.

갱신이 끝나면 다시 record 배열을 돌며 Enter 또는 Leave에 따라 문자열을 생성하고 정답 배열에 넣어준다.

 

 

코드

#include <bits/stdc++.h>
using namespace std;

vector<string> solution(vector<string> record) {
    vector<string> answer;
    unordered_map<string, string> idInfo;
    
    for(int i=0; i<record.size(); i++){
        vector<string> tmp;
        istringstream iss(record[i]);
        string buf;
        
        while(getline(iss, buf, ' ')){
            tmp.push_back(buf);
        }
        
        if(tmp[0] == "Leave") continue;
        else {
            idInfo[tmp[1]] = tmp[2];
        }
    }
    
    for(int i=0; i<record.size(); i++){
        vector<string> tmp;
        istringstream iss(record[i]);
        string buf;
        
        while(getline(iss, buf, ' ')){
            tmp.push_back(buf);
        }
        
        string systemMessage = "";
        if(tmp[0] == "Enter"){
            systemMessage += idInfo[tmp[1]];
            systemMessage += "님이 들어왔습니다.";
        }
        else if(tmp[0] == "Leave"){
            systemMessage += idInfo[tmp[1]];
            systemMessage += "님이 나갔습니다.";
        }
        else continue;
        
        answer.push_back(systemMessage);
    }
    
    return answer;
}
반응형