[프로그래머스] 오픈채팅방

mmnono·2025년 4월 18일
0

알고리즘

목록 보기
10/10

문제

https://school.programmers.co.kr/learn/courses/30/lessons/1835

Enter uid1234 Muzi
Leave uid1234
Change uid4567 Ryan

풀이

각 명령어들을 처리하여 완성된 문자열과 사용될 회원 id로 저장하겠다.

  1. 임의의 명령어 str이 있다
  2. 공백을 기준으로 명령어를 자른다.
    • 모든 str의 첫번째 블록은 명령 지시어이다. -> command
    • 모든 str의 두번째 블록은 userId이다. -> id
    • Enter, Change일 경우 userName이 따라온다 -> nickName
  3. 각 지시어에 따라 result에 문자열과 사용될 회원 id를 넣어준다.
  4. 채팅방에 들어온 회원들은 id:nickName 형식으로 map에 저장된다.
    • 이름이 변경될 경우 해당 id로 접근하여 변경해준다.

코드

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

using namespace std;

vector<string> g_record;
map<string, string> user_map; //id : nickName
vector<pair<string, string>> result; 
vector<string> result_string;

void solve() {
    //1. record를 명령어 처리
	for (auto& s : g_record) {
		//공백 기준으로 명령어 자르기
		stringstream ss(s);
		ss.str(s);

		//명령어 할당
		string command;
		ss >> command;

		string id;
		string nickName;

		if (command == "Enter") {
			ss >> id >> nickName;
			user_map[id] = nickName;
			result.push_back({ id, "님이 들어왔습니다."});
		}
		else if (command == "Leave") {
			ss >> id;
			result.push_back({ id, "님이 나갔습니다." });
		}
		else if (command == "Change") {
			ss >> id >> nickName;
			user_map[id] = nickName;
		}
	}

	//2. 결과 구성하기
	for (auto& s : result) {
		result_string.push_back(user_map[s.first] + s.second);
	}
    
}

vector<string> solution(vector<string> record) {
    vector<string> answer;
	g_record = record;
	solve();
	answer = result_string;
    return answer;
}

0개의 댓글