N

(프로그래머스 c++ KAKAO)오픈 채팅방 본문

프로그래머스 알고리즘/KAKAO

(프로그래머스 c++ KAKAO)오픈 채팅방

naeunchan 2020. 6. 3. 11:57
728x90
반응형

주어진 문자열을 나누고, 맵을 이용하는 것이 핵심인 문제..!

우선 유저가 어떤 상태인지 확인하는 state 벡터를 선언하고,

해당 유저의 닉네임을 확인하기 위해 <string, string>형 map인 user를 선언하였다.

(state는 Enter, Leave, Change)

 

record의 크기만큼 for문을 돈다.

우선 record[i]를 tokenize 하여 문자열을 나누도록 한다.

문자열을 나눈 결과를 str[3]에 각각 (state, id, nickname)을 저장하도록 하였다.

 

str[0]을 확인하여 Enter인 경우 state에 "님이 들어왔습니다."를 넣어주고, 해당 id의 닉네임을 주도록 한다.

Leave인 경우 "님이 나갔습니다."를 state에 넣어주도록 한다.

마지막으로 Change인 경우 해당 id의 nickname을 변경해주면 된다.

 

for문을 다 돈 후, answer에는 차례대로 유저의 id가 담겨져 있다.

user에는 id에 따른 nickname이 담겨져 있으므로 answer[i] = user[answer[i]] + state[i]를 하게 되면

해당 유저 id의 닉네임 + state로 바뀌게 된다.

#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
#include <sstream>

using namespace std;

vector<string> solution(vector<string> record) {
    vector<string> answer, state;
    map<string, string> user;

    for(int i = 0; i < record.size(); i++)
    {
        string str[3];
        string token;
        stringstream ss(record[i]);
        int index = 0;
        
        while(ss >> token)
            str[index++] = token;
        
        if(str[0] == "Enter")
        {
            state.push_back("님이 들어왔습니다.");
            answer.push_back(str[1]);
            user[str[1]] = str[2];
        }
        else if(str[0] == "Leave")
        {
            state.push_back("님이 나갔습니다.");
            answer.push_back(str[1]);
        }
        else
            user[str[1]] = str[2];
    }
    
    for(int i = 0; i < answer.size(); i++)
        answer[i] = user[answer[i]] + state[i];
    
    return answer;
}

 

728x90
반응형