https://programmers.co.kr/learn/courses/30/lessons/42888

 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

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 <unordered_map>
#include <sstream>
 
using namespace std;
 
vector<string> solution(vector<string> record) {
    vector<string> answer;
    vector<pair<stringstring>> chat; //id, func저장
    unordered_map<stringstring> people; //key : id, val : nickname 저장
    
    for(int i=0; i<record.size(); i++){
        string toki[3];//각 record 들의 function, id, nickname을 저장할 배열
        string token;
        stringstream ss(record[i]);//stringstream에 넣으면 공백을 기준으로 문자열을 잘라줌
        int idx = 0;
        
        while (ss >> token) {//stream에서 하나씩 빼와서 token에 넣어줌.
            toki[idx++= token;//token을 toki 배열에 저장.
        }
        //알아보기 쉽게 변수를 할당하여 저장
        string func = toki[0];
        string id = toki[1];
        string nick = toki[2];
        //function이 Change가 아닐 때, chat 내용에 남김.
        if(func!="Change"){
            chat.push_back({id, func});//여기서 id와 function을 저장하는 이유는, nickname은 나중에 바뀔 수도 있기 때문!
        }
        //function이 Leave가 아닐 때, 해당 id에 대응하는 nickname 을 map에 저장.
        if(func!="Leave"){
            people[id] = nick;
        }
    }
    //채팅 내용 answer에 추가
    for(int i=0;i<chat.size();i++){
        string nick = people[chat[i].first];//id에 대응하는 nickname
        string func = chat[i].second;//function
        string msg = "";
        //추가
        if(func == "Enter") msg = nick+"님이 들어왔습니다.";
        else if(func=="Leave") msg= nick +"님이 나갔습니다.";
        answer.push_back(msg);
    }
    return answer;
}
cs

왠지는 모르겠는데 string toki[3]; 부분 대신 vector<string> toki;로 하고 push_back을 사용했을 때에는 에러가 났다.....왜지..?