Programmers/Level 2
C++ / 프로그래머스 / 오픈채팅방
GitHubSeob
2022. 4. 13. 00:28
문제 |
https://programmers.co.kr/learn/courses/30/lessons/42888
코딩테스트 연습 - 오픈채팅방
오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오
programmers.co.kr
문제풀이 |
logs는 vector <pair <int, string>>이다. int에는 입장인지 퇴장인지를 나타내는 0, 1을, string에는 uID를 기록한다.
(입장과 퇴장이 string형으로 주어지지만 편의상 0과 1로 나타내기로 함)
unordered_map <string, string> uid의 key는 uID, value에는 닉네임이 저장된다.
logs에는 입장, 퇴장을 순서대로 기록한다.
for (int idx = 0; idx < record.size(); ++idx) {
istringstream iss(record[idx]);
string nickname(""), s_uid(""), s_IO("");
iss >> s_IO >> s_uid >> nickname;
if (s_IO == "Enter") {
logs.push_back({ 0, s_uid });
uid[s_uid] = nickname;
}
else if (s_IO == "Leave") {
logs.push_back({ 1, s_uid });
}
else if (s_IO == "Change") {
uid[s_uid] = nickname;
}
}
istringstream을 이용해 문자열을 분리한다.
만약 입장했다면 logs에 {0, uID}를 push 하고 uid [uID]를 nickname으로 바꾼다.
만약 퇴장했다면 logs에 {1, uID}를 push 한다.
만약 닉네임을 바꿨다면 uid [uID]를 nickname으로 바꾼다.
for (int idx = 0; idx < logs.size(); ++idx) {
string str("");
str += uid[logs[idx].second];
if (logs[idx].first == 0) str += "님이 들어왔습니다.";
else if (logs[idx].first == 1) str += "님이 나갔습니다.";
answer.push_back(str);
}
logs에 기록된 순으로 문자열을 만들어 answer에 push 한다.
0이면 들어왔다고 표시한 것이므로 닉네임이 저장된 str 뒤에 "님이 들어왔습니다."를,
1이면 나갔다고 표시한 것이므로 닉네임이 저장된 str 뒤에 "님이 나갔습니다."를 더한다.
코드 |
#include <string>
#include <vector>
#include <sstream>
#include <unordered_map>
#define pis pair<int, string>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
vector<pis>logs;
unordered_map<string, string>uid;
for (int idx = 0; idx < record.size(); ++idx) {
istringstream iss(record[idx]);
string nickname(""), s_uid(""), s_IO("");
iss >> s_IO >> s_uid >> nickname;
if (s_IO == "Enter") {
logs.push_back({ 0, s_uid });
uid[s_uid] = nickname;
}
else if (s_IO == "Leave") {
logs.push_back({ 1, s_uid });
}
else if (s_IO == "Change") {
uid[s_uid] = nickname;
}
}
for (int idx = 0; idx < logs.size(); ++idx) {
string str("");
str += uid[logs[idx].second];
if (logs[idx].first == 0) str += "님이 들어왔습니다.";
else if (logs[idx].first == 1) str += "님이 나갔습니다.";
answer.push_back(str);
}
return answer;
}