-
오픈채팅방프로그래머스(Programmers) 2021. 12. 9. 20:42반응형
제한사항
- record는 다음과 같은 문자열이 담긴 배열이며, 길이는 1 이상 100,000 이하이다.
- 다음은 record에 담긴 문자열에 대한 설명이다.
- 모든 유저는 [유저 아이디]로 구분한다.
- [유저 아이디] 사용자가 [닉네임]으로 채팅방에 입장 - "Enter [유저 아이디] [닉네임]" (ex. "Enter uid1234 Muzi")
- [유저 아이디] 사용자가 채팅방에서 퇴장 - "Leave [유저 아이디]" (ex. "Leave uid1234")
- [유저 아이디] 사용자가 닉네임을 [닉네임]으로 변경 - "Change [유저 아이디] [닉네임]" (ex. "Change uid1234 Muzi")
- 첫 단어는 Enter, Leave, Change 중 하나이다.
- 각 단어는 공백으로 구분되어 있으며, 알파벳 대문자, 소문자, 숫자로만 이루어져 있다.
- 유저 아이디와 닉네임은 알파벳 대문자, 소문자를 구별한다.
- 유저 아이디와 닉네임의 길이는 1 이상 10 이하이다.
- 채팅방에서 나간 유저가 닉네임을 변경하는 등 잘못된 입력은 주어지지 않는다.
입출력 예
record result
["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"] ["Prodo님이 들어왔습니다.", "Ryan님이 들어왔습니다.", "Prodo님이 나갔습니다.", "Prodo님이 들어왔습니다."] 입출력 예 설명
입출력 예 #1
문제의 설명과 같다.#include <string> #include <vector> #include <map> #include <sstream> using namespace std; vector<string> split(string sentence, char Separator) { vector<string> answer; stringstream ss(sentence); string tmp; while (getline(ss, tmp, Separator)) { answer.push_back(tmp); } return answer; } vector<string> solution(vector<string> record) { vector<string> answer; vector<string> alert; //들어왔습니다, 나갔습니다. map<string,string> uid_name; for(int i=0; i<record.size(); i++) { vector<string> tmp = split(record[i], ' '); if(tmp[0] == "Enter") { alert.push_back("님이 들어왔습니다."); uid_name[tmp[1]] =tmp[2]; answer.push_back(tmp[1]); } else if(tmp[0] == "Leave") { alert.push_back("님이 나갔습니다."); answer.push_back(tmp[1]); } else // 이름 변경한 경우 { uid_name[tmp[1]]=tmp[2]; } } for(int i=0; i<answer.size(); i++) { answer[i] = uid_name[answer[i]] + alert[i]; } return answer; }
=> map을 사용해 유일 키인 uid 값에 따른 name을 변경하면서 출입유무를 기록하면 됩니다.
=> alert : 현 상황에서 어떠한 자가 들어가고 나갔고를 저장합니다.
=> uid_name : 유일키인 uid 값을 key로 가지고 name이라는 value를 가지는 <string, string> 형 MAP 자료형입니다.
=> JAVA와 PYTHON의 경우 split 함수를 지원하지만 C++의 경우 지원하지 않습니다. 그러므로 split 함수를 자체 생성하여 사용하여야 합니다.
https://codingham.tistory.com/247
=> 위의 함수를 통해 vector <string> record를 나눴습니다.
=> for문을 통해 tmp [0]의 값에 따라 alert와 uid_name에 들어갈 값을 적절히 조정해주었습니다.
=> string의 경우 값이 있다고 하더라고 = 를 통해 후위에 오는 연산식을 통해 해당 구역을 재지정해줄 수 있습니다.
반응형'프로그래머스(Programmers)' 카테고리의 다른 글
없는 숫자 더하기 (0) 2021.12.11 문자열 압축 (0) 2021.12.10 루시와 엘라 찾기 (0) 2021.12.08 숫자 문자열과 영단어 (0) 2021.12.06 주식가격 (0) 2021.12.03