오늘의 알고리즘

[C++]2019 KAKAO BLIND RECRUITMENT 오픈채팅방(프로그래머스 2레벨)

하늘하늘 . 2022. 1. 24. 15:30
#include <string>
#include <vector>
#include <map>
#include <algorithm>
 
using namespace std;
 
vector<string> solution(vector<string> record) 
{
    vector<string> answer;
    map<string, string> nickname;
 
    int firstSpace = 0;
    int secondSpace = 0;
    string id = {};
    string nick = {};
    string enter = "님이 들어왔습니다.";
    string leave = "님이 나갔습니다.";
 
    for (int i = 0; i < record.size(); ++i)
    {
    	// space 위치 찾기
        firstSpace = record[i].find(" ");
        secondSpace = record[i].find(" ", firstSpace + 1);
 
 		// space 위치를 이용해서 아이디와 닉네임 위치 찾기
        id = string(record[i], firstSpace + 1, secondSpace - firstSpace - 1);
        nick = string(record[i], secondSpace + 1);
 
        if (record[i][0] == 'E')
        {
            if (!nickname.count(id))
                nickname.insert({ id, nick });
 
            else
                nickname[id] = nick;
 
            answer.push_back(id + enter);
        }
 
        else if (record[i][0] == 'L')
        {
            answer.push_back(id + leave);
        }
 
        else if (record[i][0] == 'C')
        {
            nickname[id] =  nick;
        }
    }
 
    int find = 0;
    string changename = {};
    for (int i = 0; i < answer.size(); ++i)
    {
    	// 님을 이용해서 찾기
        find = answer[i].find("님");
        changename = string(answer[i], 0, find);
        nick = nickname[changename];
        answer[i].replace(0, find, nick);
    }
 
    return answer;
}

이전 것들 총집합? 이런 느낌!

시간이 생각보다 덜 걸렸네! 점점 줄어가는 기분?