Game Develop

[Algorithm] Programmers :: 오픈채팅방 본문

Algorithm/Programmers

[Algorithm] Programmers :: 오픈채팅방

MaxLevel 2022. 7. 15. 23:59

https://school.programmers.co.kr/learn/courses/30/lessons/42888?language=cpp 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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
47
48
49
50
51
52
53
vector<string> solution(vector<string> record) {
    vector<string> answer;
 
    map<stringstring> idMap;
 
    for (int i = 0; i < record.size(); i++)
    {
        istringstream ss(record[i]);
        vector<string> words;
        string word;
 
        while (getline(ss, word, ' '))
        {
            words.push_back(word);
        }
 
        // words[0] == 명령어
        // words[1] == ID
        // words[2] == 닉네임.
 
        if (words[0== "Enter" || words[0== "Change")
        {
            idMap[words[1]] = words[2];
        }
    }
 
    for (int i = 0; i < record.size(); i++)
    {
        istringstream ss(record[i]);
        vector<string> words;
        string word;
 
        while (getline(ss, word, ' '))
        {
            words.push_back(word);
        }
 
        string temp;
 
        if (words[0== "Enter")
        {
            temp = idMap[words[1]] + "님이 들어왔습니다.";
            answer.push_back(temp);
        }
        else if (words[0== "Leave")
        {
            temp = idMap[words[1]] + "님이 나갔습니다.";
            answer.push_back(temp);
        }
    }
 
    return answer;
}
cs

카카오 2레벨짜리 문제다.

최종적으로 변경된 닉네임으로 로그를 출력하는 문제인데, 어차피 id는 고정이라서 닉네임이 변경될 수 있는 가능성을 지닌 이벤트인 채팅방 입장(Enter), 닉네임 변경(Change) 일 때, map[id] = nickname; 처럼 작성해서 최종적으로 최신닉네임을 알 수 있도록 짰다. 

그 다음 다시 배열을 한번 돌면서 id값에 맞게 닉네임을 변경하고 최종출력할 스트링을 완성시키면 된다.