Dolphins의 HelloWorld

(2018)kakao blind recruitment 1차 > 오픈채팅방 본문

Algorithm/Programmers 문제풀이

(2018)kakao blind recruitment 1차 > 오픈채팅방

돌핀's 2018. 9. 27. 15:50

문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42888


정답률 : 59%


풀이



이 문제를 풀기위해 내가 쓴 핵심개념은 map과 queue이다.


일단 채팅창에 남는 메세지를 순서대로 저장하기위해 queue를 사용했으며


큐에는 Enter혹은 Leave와 uid를 함께 삽입하였다.


또한 map을 통해 uid에 대한 닉네임을 최신화시켜줌으로써


큐에서 하나씩 꺼낼 때 가장 최신화된 닉네임으로 메세지를 출력하도록 하였다.


#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <map>

using namespace std;

vector<string> solution(vector<string> record) {
	vector<string> answer;
	queue<pair<string, string>> q;
	map<string, string> m;
	for (int i = 0; i < record.size(); i++)
	{
		string tmp;
		vector<string> v;
		for (int j = 0; j < record[i].size(); j++) {
			if (record[i][j] == ' ') {
				v.push_back(tmp);
				tmp.clear();
			}
			else tmp.push_back(record[i][j]);
		}
		v.push_back(tmp);
		if (v[0] == "Change") {
			m[v[1]] = v[2];
		}
		else if (v[0] == "Leave")
			q.push(make_pair(v[0], v[1]));
		else {
			q.push(make_pair(v[0], v[1]));
			m[v[1]] = v[2];
		}
	}
	while (!q.empty())
	{
		string x = q.front().first;
		string y = q.front().second;
		string result;
		q.pop();
		if (x == "Enter")
			result = m[y] + "님이 들어왔습니다.";
		else
			result = m[y] + "님이 나갔습니다.";

		answer.push_back(result);
	}
	
	return answer;
}


Comments