C++:: 프로그래머스 < 오픈채팅방 >

jahlee·2023년 7월 7일
0

프로그래머스_Lv.2

목록 보기
70/106
post-thumbnail

uid가 유저의 고유한 값이기 때문에 이를 기준으로 문제를 해결해 나아가면 되는 문제이다. 크게 어렵지않고 순서대로 해나가면 되는 문제이다.

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

vector<string> solution(vector<string> record) {
    vector<string> answer;
    string message[2] = {"님이 들어왔습니다.", "님이 나갔습니다."};
    vector<pair<string, int>> order;// 들어오고 나간 순서를 저장
    unordered_map<string, string> id_name;// uid를 기반으로 닉네임 저장
    
    for (auto r : record) {
        string cmd, uid, name;
        istringstream iss(r);// 입력 스트림으로 받아준다.(공백을 기준으로 나눠줄 때 유용)
        iss >> cmd;
        if (cmd == "Enter") {
            iss >> uid >> name;
            order.push_back({uid, 0});// 출입 순서에 uid로 저장
            id_name[uid] = name;// uid 닉네임 저장
        } else if (cmd == "Leave") {
            iss >> uid;
            order.push_back({uid, 1});// 출입 순서에 uid로 저장
        } else {
            iss >> uid >> name;
            id_name[uid] = name;// uid 닉네임 갱신
        }
    }
    for (auto o : order) {
    	// 출입순서의 uid에 맞춰 닉네임 + 행동을 넣어준다.
        answer.push_back(id_name[o.first] + message[o.second]);
    }
    return answer;
}

0개의 댓글