-

[프로그래머스_레벨 3] 오픈채팅방(2019 KAKAO BLIND RECRUIT.) 본문

1-4. 프로그래머스

[프로그래머스_레벨 3] 오픈채팅방(2019 KAKAO BLIND RECRUIT.)

asdklfjlasdlfkj 2020. 2. 11. 20:04

문자열과 <map>을 능숙하게 다루면 쉽게 해결할 수 있는 문제다.

먼저 answer에

id+"님이 들어왔습니다." 또는 

id+"님이 나갔습니다."와 같은 형태로 저장하고, 이름 변경의 경우 (Change나 Enter에 기존 id의 다른 입력으로 입장) map의 해당 key의 value를 바꿔주는 식으로 answer을 저장했다.

 

참고로 map은 기존에 없는 key값에 대한 대입은 새로운 key,value 쌍의 입력을 하도록 동작하며, 

기존에 있는 key값에 대해서는 value의 갱신을 수행해주는 기능이 있다. 이 덕분에 29행/35행과 같이 기존에 있건없건 동일한 코드로 동작시킬 수 있다. 간편한 기능이다.

 

마지막으로 answer에 uid+안내문의 형식을 다시 M[uid]+안내문의 형식으로 바꿔주면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <string>
#include <vector>
#include <map>
#include <sstream>
#define ENTER "님이 들어왔습니다."
#define OUT "님이 나갔습니다."
using namespace std;
 
vector<string> solution(vector<string> record) {
    vector<string> answer;
    map<stringstring> M; // id, name
    for(int i=0; i<record.size(); i++){
        string empty;
        string order = "", id = "", name = "";
        stringstream ss(record[i]);
        while(ss >> empty){
            if(order.compare(""== 0){
                order = empty;
            }
            else if(id.compare(""== 0){
                id = empty;
            }
            else{
                name = empty;
            }
        }
        if(order.compare("Enter"== 0){
            answer.push_back(id+ENTER);
            M[id] = name;
        }
        else if(order.compare("Leave"== 0){ // 나가는 것 답에만 표시
            answer.push_back(id+OUT);
        }
        else if(order.compare("Change"== 0){ // id찾아서 해당 이름 변경
            M[id] = name;
        }
    }
    // answer에 id를 이름으로 변경시킨 뒤 반환.
    for(int i=0; i<answer.size(); i++){
        string cur = answer[i];
        int nim_idx = cur.find("님");        
        string ID = cur.substr(0, nim_idx);
        answer[i].replace(0ID.length(), M[ID]);
    }
    return answer;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

Comments