-
[프로그래머스] 오픈채팅방Problem Solving/Programmers 2020. 5. 4. 18:19
✔️ 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42888
✔️ 풀이
- map<유저아이디, 닉네임>을 사용한다.
- 채팅방에 들어오거나(Enter) 닉네임을 바꿀때(Change) 유저 아이디를 key 값으로 사용해서 닉네임을 바꿔준다.
✔️ 문제 회고
- map을 이용하는 문제였다.
- istringstream을 사용해서 공백을 기준으로 문자열을 손쉽게 자를 수 있다.
👨🏻💻 소스 코드
#include <string> #include <vector> #include <map> using namespace std; vector<string> solution(vector<string> record) { map<string, string> userMap; vector<vector<string>> log; for (int i = 0; i < record.size(); i++) { // 문자열을 공백을 기준으로 자른다. vector<string> elements; string tmp = ""; for (int j = 0; j <= record[i].size(); j++) { if (record[i][j] == ' ' || j == record[i].size()) { elements.push_back(tmp); tmp = ""; } else { tmp += record[i][j]; } } if(elements.size() >=3) userMap[elements[1]] = elements[2]; log.push_back(elements); //문자열을 공백을 기준으로 잘라서, vector로 만들어 log에 추가한다. } vector<string> ret; // log를 순회하면서 결과를 출력한다. for (int i = 0; i < log.size(); i++) { if (log[i][0] == "Enter") { ret.push_back(userMap[log[i][1]] + "님이 들어왔습니다."); } else if (log[i][0] == "Leave") { ret.push_back(userMap[log[i][1]] + "님이 나갔습니다."); } } return ret; }
👨🏻💻 개선된 소스 코드
#include <string> #include <vector> #include <sstream> #include <map> using namespace std; vector<string> solution(vector<string> record) { vector<string> answer; vector<vector<string>> log(record.size(), vector<string>(3)); map<string, string> userMap; // istringstream을 사용하면 정말 간편하게 공백을 기준으로 문자열을 자를 수 있다. for (int i = 0; i < record.size(); i++) { istringstream iss(record[i]); iss >> log[i][0]; iss >> log[i][1]; iss >> log[i][2]; if (log[i][0] == "Enter" || log[i][0] == "Change") { userMap[log[i][1]] = log[i][2]; } } for (int i = 0; i < log.size(); i++) { if (log[i][0] == "Enter") { answer.push_back(userMap[log[i][1]] + "님이 들어왔습니다."); } else if (log[i][0] == "Leave") { answer.push_back(userMap[log[i][1]] + "님이 나갔습니다."); } } return answer; }
'Problem Solving > Programmers' 카테고리의 다른 글
[Programmers] 괄호 변환 (0) 2020.06.01 [프로그래머스] 튜플 (0) 2020.05.08 [프로그래머스] 후보키 (0) 2020.05.07 [프로그래머스] 프렌즈 4블록 (0) 2020.05.03