프로그래밍/코딩테스트

코딩테스트 : 오픈채팅방

백사니 2025. 2. 4. 01:12
728x90
반응형

해당 문제는 주어지는 record에서 상태, 아이디, 닉네임을 추출해서 알맞게 사용하는 문제로 3가지 정보 분리 후 차례대로 문제를 해결하면 쉽게 풀 수 있다.

#include <string>
#include <vector>
#include <map>
#include <sstream>

using namespace std;

vector<string> solution(vector<string> record) {
    vector<string> answer;
    //State와 id를 저장
    vector<pair<string, string>> v;
    
    //string : id, string : name
    map<string, string> m;
    
    //for문이 끝나면 최종 id와 그에 맞는 name이 저장된다.
    for(string str : record)
    {
        //공백을 기준으로 문자열을 나누어준다.
        stringstream ss(str);
        string state;
        string id;
        string name;
        
        //나눈 문자열을 차례대로 state, id, name에 저장한다.
        ss >> state >> id >> name;
        
        //state와 id를 순서대로 저장한다.
        v.push_back(make_pair(state, id));
        
        //이름 변경은 Enter, Change에서만 변경되기에 이때만 이름 변경
        if(state == "Enter" || state == "Change")
        {
            //id는 바뀌지 않으니 id를 키 값으로 이름을 저장한다.
            m[id] = name;
        }
    }
    
    //저장된 순서를 한개씩 가져온다.
    for(pair<string, string> p : v)
    {
        //state가 Enter면
        if(p.first == "Enter")
        {
            //현재 유저의 최종 이름을 가져와 문자열을 만든다.
            answer.push_back(m[p.second] + "님이 들어왔습니다.");
        }
        //state가 Leave면
        else if(p.first == "Leave")
        {
            answer.push_back(m[p.second] + "님이 나갔습니다.");
        }
    }
    
    return answer;
}
728x90
반응형