굥뷰를 햡시댜
[2018 Kakao Blind] 오픈채팅방 본문
https://programmers.co.kr/learn/courses/30/lessons/42888
시간이 꽤 걸린 문제다..
이유는 2가지였다.
1. 문자열 파싱이 익숙하지 않았다.
2. 이름을 바꾼 뒤의 결과를 고려해주는 부분을 생각해내는 것에서 시간을 많이 잡아먹었다.
만약 실제로 시험을 보는 상황이었다면 이 문제만 풀다가 시간을 보냈을 것 같다..
-문제 풀이
1. 입력으로 들어온 record를 각각 세 부분으로 나눠줬다.(명령, 아이디, 닉네임)
2. 각 명령에 따라 map에 새로 추가되거나 변경되거나 나갔을 경우의 아이디와 닉네임을 넣어주는 map 1개와 추가와 변경해줬을 경우만 고려한 map 1개를 선언해줬고 이에 맞게 map을 사용했다.
3. 각 명령에 따라 변경된 닉네임에 대한 명령을 answer에 추가해줬다.
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
map<string, string> m, m2;
vector<string> one, two, three;
vector<string> solution(vector<string> record) {
vector<string> answer;
for (int i = 0; i < record.size(); i++) {
string str = record[i];
int f_pos = str.find(" ");
string first = str.substr(0, f_pos);
str = str.substr(f_pos + 1);
int s_pos = str.find(" ");
string second = str.substr(0, s_pos);
str = str.substr(s_pos + 1);
string third = "";
if (first != "Leave") {
int t_pos = str.find(" ");
third = str.substr(0, t_pos);
str = str.substr(t_pos + 1);
}
one.push_back(first); //명령
two.push_back(second); //아이디
three.push_back(third); //닉네임
}
for (int j = 0; j < record.size(); j++) {
if (one[j] == "Enter") {
if (m.count(two[j]) != 0) {
m[two[j]] = three[j];
m2[two[j]] = three[j];
}
else {
m.insert(make_pair(two[j], three[j]));
if (m2.count(two[j]) != 0) {
m2[two[j]] = three[j];
}
else m2.insert(make_pair(two[j], three[j]));
}
}
else if (one[j] == "Leave") {
three[j] = m[two[j]];
m.erase(two[j]);
}
else if (one[j] == "Change") {
m[two[j]] = three[j];
m2[two[j]] = three[j];
}
}
for (int j = 0; j < record.size(); j++) {
if (one[j] == "Enter") {
if (m[two[j]] != "")
answer.push_back(m[two[j]] + "님이 들어왔습니다.");
else
answer.push_back(m2[two[j]] + "님이 들어왔습니다.");
}
else if (one[j] == "Leave") {
if (m[two[j]] != "")
answer.push_back(m[two[j]] + "님이 나갔습니다.");
else
answer.push_back(m2[two[j]] + "님이 나갔습니다.");
}
}
return answer;
}
'알고리즘 문제 풀이 > 2019 Kakao Blind 문제 풀이' 카테고리의 다른 글
[2018 Kakao Blind] 블록게임 (0) | 2019.09.05 |
---|---|
[2018 Kakao Blind] 무지의 먹방 라이브 (0) | 2019.08.12 |
[2018 Kakao Blind] 실패율 (0) | 2019.08.08 |
Comments