[Programmers] 오픈채팅방(Lv.2)(C++)

Alice·2023년 8월 21일
0

풀이 소요시간 : 20분

MapVector 를 이용해 풀 수 있는 간단한 구현문제였다. 나는 각 유저를 구조체로 변환하여 문제를 풀었는데, 상태 값이 Enter 이거나 Change 인 경우 유저 아이디에 해당되는 닉네임을 수정해주면 되는 간단한 구현이 필요했다.


전체 코드

#include <string>
#include <vector>
#include <sstream>
#include <unordered_map>
#include <iostream>
using namespace std;

unordered_map<string, string> Map;
//아이디, 닉네임

string IN = "님이 들어왔습니다.";
string OUT = "님이 나갔습니다.";

struct Data {
    string state;
    string id;
    string name;
};
vector<Data> Vector;
vector<string> Ans;

vector<string> solution(vector<string> record) {
    //데이터 정리
    for(string str : record)
    {
        vector<string> Temp;
        
        istringstream ss(str);
        string token;
        while(getline(ss, token, ' '))
        {
            Temp.push_back(token);
        }
        
        if(Temp.size() == 2)
        {
            Vector.push_back({Temp[0], Temp[1], "DEFAULT"});
        }
        else if(Temp.size() == 3)
        {
            Vector.push_back({Temp[0], Temp[1], Temp[2]});
        }
    }
    
    //Map 에 최종 id - name 페어 정리
    for(auto& E : Vector)
    {
        if(E.state == "Enter" || E.state == "Change")
        {
            Map[E.id] = E.name;
        }
    }
    
    //최종 결과 정리
    for(auto& E : Vector)
    {
        if(E.state == "Enter")
        {
            Ans.push_back(Map[E.id] + IN);
        }
        else if(E.state == "Leave")
        {
            Ans.push_back(Map[E.id] + OUT);
        }
    }
    
    return Ans;
}
profile
SSAFY 11th

0개의 댓글