본문 바로가기
전공공부/코딩테스트

(c++) 프로그래머스 "오픈채팅방"

by 시아나 2022. 6. 23.

https://programmers.co.kr/learn/courses/30/lessons/42888

 

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

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

programmers.co.kr


#include <string>
#include <vector>
#include <sstream>
#include <unordered_map>

using namespace std;

vector<string> solution(vector<string> record) {
    vector<string> answer; //정답
    vector<pair<bool, string>> result; //결과로 찍을 순서
    unordered_map<string, string> users; //id와 닉네임을 넣는 map
    for (string r : record) { //마지막 닉네임을 알아내기 위해
        string command, uid, unick;
        istringstream ss(r);
        ss >> command >> uid >> unick;
        if (!command.compare("Enter")) { //입장
            users[uid] = unick;
            result.push_back({ true,uid });
        }
        else if (!command.compare("Leave")) { //퇴장
            result.push_back({ false,uid });
        }
        else { //변경
            users[uid] = unick;
        }
    }
    for (auto tmp : result) { //결과를 저장하는 단계
        string nickname = users[tmp.second];
        if (tmp.first) { //입장
            answer.push_back(nickname + "님이 들어왔습니다.");
        }
        else { //퇴장
            answer.push_back(nickname + "님이 나갔습니다.");
        }
    }
    return answer;
}