Coding_Test 연습/Programmers

[프로그래머스] (C++) LV2 오픈채팅방

Codetesing 2022. 4. 28. 12:22

C++에는 split이 없어서 입력을 처리하는데 더 오래 걸린거 같다.

실제 코테에선 이런 문제는 python을 써서 풀 것 같다.

입력을 제외하면 구현은 딱히 어렵지 않다. map을 써서 hash로 id name을 구별 하면 된다.

#include <iostream>

#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <utility>

using namespace std;

vector<string> TRANS_RECORD(string s)
{
    vector<string> temp;

    int rev = 0;
    for (int i = 0; i < s.size(); i++)
        if (s[i] == ' ')
        {
            temp.push_back(s.substr(rev, i));
            rev = i + 1;
            break;
        }

    if (temp[0] == "Leave")
        temp.push_back(s.substr(rev));
    else
        for(int i = 0; i < s.size() - rev; i++)
            if (s[rev + i] == ' ')
            {
                temp.push_back(s.substr(rev, i));
                temp.push_back(s.substr(rev + i + 1, s.size() - rev - i - 1));
                break;
            }

    return temp;
}

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

    for (int i = 0; i < record.size(); i++)
        translated_record.push_back(TRANS_RECORD(record[i]));

    for (int i = 0; i < translated_record.size(); i++)
    {
        if (translated_record[i][0] != "Leave")
        {
            if (user.find(translated_record[i][1]) == user.end())
                user.insert(pair<string, string>(translated_record[i][1], translated_record[i][2]));
            else
                user[translated_record[i][1]] = translated_record[i][2];
        }
    }

    for (int i = 0; i < translated_record.size(); i++)
    {
        if (translated_record[i][0] == "Enter")
            answer.push_back(user[translated_record[i][1]] + "님이 들어왔습니다.");
        else if(translated_record[i][0] == "Leave")
            answer.push_back(user[translated_record[i][1]] + "님이 나갔습니다.");
    }
    return answer;
}

int main()
{
    vector<string> temp = { "Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan" };
    solution(temp);
}