250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(프로그래머스 c++ KAKAO)오픈 채팅방 본문
728x90
반응형
주어진 문자열을 나누고, 맵을 이용하는 것이 핵심인 문제..!
우선 유저가 어떤 상태인지 확인하는 state 벡터를 선언하고,
해당 유저의 닉네임을 확인하기 위해 <string, string>형 map인 user를 선언하였다.
(state는 Enter, Leave, Change)
record의 크기만큼 for문을 돈다.
우선 record[i]를 tokenize 하여 문자열을 나누도록 한다.
문자열을 나눈 결과를 str[3]에 각각 (state, id, nickname)을 저장하도록 하였다.
str[0]을 확인하여 Enter인 경우 state에 "님이 들어왔습니다."를 넣어주고, 해당 id의 닉네임을 주도록 한다.
Leave인 경우 "님이 나갔습니다."를 state에 넣어주도록 한다.
마지막으로 Change인 경우 해당 id의 nickname을 변경해주면 된다.
for문을 다 돈 후, answer에는 차례대로 유저의 id가 담겨져 있다.
user에는 id에 따른 nickname이 담겨져 있으므로 answer[i] = user[answer[i]] + state[i]를 하게 되면
해당 유저 id의 닉네임 + state로 바뀌게 된다.
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
#include <sstream>
using namespace std;
vector<string> solution(vector<string> record) {
vector<string> answer, state;
map<string, string> user;
for(int i = 0; i < record.size(); i++)
{
string str[3];
string token;
stringstream ss(record[i]);
int index = 0;
while(ss >> token)
str[index++] = token;
if(str[0] == "Enter")
{
state.push_back("님이 들어왔습니다.");
answer.push_back(str[1]);
user[str[1]] = str[2];
}
else if(str[0] == "Leave")
{
state.push_back("님이 나갔습니다.");
answer.push_back(str[1]);
}
else
user[str[1]] = str[2];
}
for(int i = 0; i < answer.size(); i++)
answer[i] = user[answer[i]] + state[i];
return answer;
}
728x90
반응형
'프로그래머스 알고리즘 > KAKAO' 카테고리의 다른 글
(프로그래머스 c++ KAKAO)압축 (0) | 2020.06.11 |
---|---|
(프로그래머스 c++ KAKAO)방금 그 곡 (0) | 2020.06.05 |
(프로그래머스 c++ KAKAO)캐시 (0) | 2020.06.03 |
(프로그래머스 c++ KAKAO)프렌즈 4블록 (0) | 2020.06.02 |
(프로그래머스 c++ KAKAO)뉴스 클러스터링 (0) | 2020.06.01 |