-
프로그래머스 - 오픈채팅방 [C++]문제 풀이/프로그래머스 2023. 8. 28. 19:22반응형
이 문제는 구현 문제이다. 중간에 닉네임이 바뀌어도 결국 최종 결과를 리턴해야하므로, uid만으로 중간 저장을 해놓고, 마지막에 uid에 대한 닉네임을 붙여 리턴하면 된다. 입력이 작기 때문에 주어진 대로 구현만 하면 시간 초과가 나지 않고 정답을 맞출 수 있다.
#include <string> #include <vector> #include <map> #include <iostream> #include <sstream> using namespace std; vector<string> split(string input, char delimit) { stringstream ss(input); string temp; vector<string> result; while (getline(ss, temp, delimit)) { result.push_back(temp); } return result; } struct node { string uid; int state; }; #define ENTER 0 #define LEAVE 1 vector<string> solution(vector<string> record) { vector<string> answer; vector<node> results; map<string, string> names; for (string rec : record) { vector<string> temp = split(rec, ' '); string state = temp[0]; string uid = temp[1]; if (state == "Enter") { string nickname = temp[2]; names[uid] = nickname; results.push_back({uid, ENTER}); } else if (state == "Leave") { results.push_back({uid, LEAVE}); } else { // state : Change string nickname = temp[2]; names[uid] = nickname; } } for (node& no : results) { string nickname = names[no.uid]; if (no.state == ENTER) { answer.push_back(nickname + "님이 들어왔습니다."); } else if (no.state == LEAVE) { answer.push_back(nickname + "님이 나갔습니다."); } } return answer; }
반응형'문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 스킬트리 [C++] (0) 2023.08.28 프로그래머스 - 방문 길이 [C++] (0) 2023.08.28 프로그래머스 - 부대복귀 [C++] (0) 2023.08.28 프로그래머스 - 거스름돈 [C++] (0) 2023.08.28 프로그래머스 - 연속 펄스 부분 수열의 합 [C++] (2) 2023.08.28