mojo's Blog
오픈채팅방 본문
문제 링크 => 코딩테스트 연습 - 오픈채팅방 | 프로그래머스 (programmers.co.kr)
STL Map 을 이용하여 간단하게 해결할 수 있는 문제이다.
3가지 Query 가 주어진다.
먼저 Enter, Change Query 를 살펴보면 특정 uid 값이 들어올 때 해당 uid 에 대한 이름을 저장할 수 있도록 해줘야 한다.
즉, Map STL 을 이용하여 map<string, string> m; 이라고 할 때, m[ uid ] = name 으로 저장이 가능하다.
이때 Map 을 사용할 수 있는 이유는 uid, name 문자열의 길이가 최대 10 이기 때문에 사용해도 문제는 없어보인다.
만약에 문자열 길이가 크다면?
=> Hash 를 사용하여 uid를 해싱한 값 hashValue 와 name 을 묶어줘야 한다.
uid 에 대한 name 을 모두 저장하였다면 Enter, Leave Query 에 대해 다음과 같이 벡터 answer 에 push 하면된다.
Enter => m[uid] + "님이 들어왔습니다."
Leave => m[uid] + "님이 나갔습니다."
풀이 Code
#include <string>
#include <vector>
#include <map>
using namespace std;
string query[100000][3];
int querySize;
vector<string> solution(vector<string> record) {
vector<string> answer;
querySize = record.size();
for(int i=0; i<record.size(); i++){
string s = "";
int idx = 0;
for(int j=0; j<record[i].size(); j++){
if(record[i][j] != ' ') s += record[i][j];
else{
query[i][idx++] = s;
s = "";
}
}
query[i][idx] = s;
}
map<string, string> m;
for(int i=0; i<querySize; i++){
if(query[i][0] == "Enter" || query[i][0] == "Change"){
m[query[i][1]] = query[i][2];
}
}
for(int i=0; i<querySize; i++){
if(query[i][0] == "Enter"){
answer.push_back(m[query[i][1]]+"님이 들어왔습니다.");
}
else if(query[i][0] == "Leave"){
answer.push_back(m[query[i][1]]+"님이 나갔습니다.");
}
}
return answer;
}
Comments