본문 바로가기
Algorithm/문제 풀이 (Problem Solving)

[C++, 문자열] 프로그래머스 오픈채팅방

by matters_ 2022. 4. 4.

문제

https://programmers.co.kr/learn/courses/30/lessons/42888

 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

 

해답

Stringstream과 hash를 이용해 풀이하였다.

#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <unordered_map>

using namespace std;

unordered_map <string, string> nameMap;

class tans{
public:
	string ac;
	string h;
};

vector<string> solution(vector<string> record) {
	string action, hash, name;
	vector <tans> tanswer;
	for (auto re : record) {
		stringstream ss(re);
		ss >> action >> hash >>name;
		if (action == "Enter") {
			nameMap[hash] = name;
			tanswer.push_back({ action,hash });
		} else if (action == "Leave") {
			tanswer.push_back({ action,hash });
		} else if (action == "Change") {
			nameMap[hash] = name;
		}
	}

	vector<string> answer;

	for (int i = 0; i < tanswer.size(); i++) {
		string realans = "";
		if (tanswer[i].ac == "Enter") {
			realans = nameMap[tanswer[i].h] + "님이 들어왔습니다.";
		} else if (tanswer[i].ac == "Leave") {
			realans = nameMap[tanswer[i].h] + "님이 나갔습니다.";
		}
		answer.push_back(realans);
	}

	return answer;
}

 

댓글