728x90
오픈채팅방
문제 설명
사용자의 id
를 key
값으로 가지며 사용자의 행동에 따라 변하는 결과를 출력하는 문제다.
이미지의 예시가 정확한 설명을 해주고 있다.
문제 풀이
소스코드 : C++
record
에 기록된 행동들에 대해split
을 해주어vector<string> tmp
에 순서대로 담아준다.- 명령에 따라 조건을 처리해준다.
- Enter 라면
id
를key
값으로 하고nickname
을value
로 하는unordered_map
에 넣어주고q
에{id , "님이 들어왔습니다."}
를 푸시해준다.
이때 이미 존재하는key
라면nickname
을 변경해준다. - Leave 라면
q
에{id , "님이 나갔습니다."}
를 푸시해준다. - Change 라면
unordered_map
에 존재하는id
의value
를 새로운nickname
으로 변경해준다.
- Enter 라면
- 위 과정을 반복하여
record
사이즈만큼 반복해준다. q
에서 하나씩 꺼내면서 해당id
를unordered_map
에 있는value
로 모두 바꾸어answer
에 넣어준다.
#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
#include <unordered_map>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer;
unordered_map<string, string> um; // key = id value = 닉네임
queue<pair<string,string>> q;
for(int i=0; i<record.size(); i++){
vector<string> tmp(3,"");
int idx=0;
for(int j=0; j<record[i].size(); j++){
char c = record[i][j];
if(c==' ') idx++;
else tmp[idx]+=c;
}
string cmd = tmp[0];
string id , nick;
if(cmd == "Enter"){
id = tmp[1], nick = tmp[2];
if(um.find(id)==um.end())
um.insert({id,nick});
else um[id] = nick;
q.push({id,"님이 들어왔습니다."});
}
else if(cmd == "Leave"){
id = tmp[1];
q.push({id,"님이 나갔습니다."});
}
else{
id = tmp[1], nick = tmp[2];
um[id] = nick;
}
}
while(!q.empty()){
pair<string, string> cur = q.front();
q.pop();
answer.push_back(um[cur.first]+cur.second);
}
return answer;
}
소스코드 : Python
C++과 큰 차이는 없지만 이번에는 record
기준으로 문제를 풀었다.
record
를 탐색하면서 split 을 하고Enter 또는 Chage
인 경우에id
를key
값으로하는 딕셔너리m
에value
값을 갱신해준다.
- 위 과정을 반복하고 다시 한 번
record
를 탐색한다. - 명령이
Change
가 아닌 경우에 미리 지정해 두었던 딕셔너리printer = {'Enter':'님이 들어왔습니다.', 'Leave':'님이 나갔습니다.'}
를 이용하여m
의value
값 +print
의value
값 을answer
에 넣어준다.
def solution(record):
answer = []
m = {}
printer = {'Enter':'님이 들어왔습니다.', 'Leave':'님이 나갔습니다.'}
for r in record:
tmp = r.split(' ')
if tmp[0] in ['Enter', 'Change']:
m[tmp[1]] = tmp[2]
for r in record:
if r.split(' ')[0] != 'Change':
answer.append(m[r.split(' ')[1]] + printer[r.split(' ')[0]])
return answer
input_record = ["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"]
print(solution(input_record))
728x90
300x250