반응형
해결 방법
문제를 보면, 유저가 중간에 닉네임을 변경했을 경우에도 이전에 기록했던 닉네임들까지 변경된 닉네임으로 바뀐다고 한다.
즉, 유저별 마지막 닉네임이 가장 중요하다.
유저의 닉네임이 바뀌는 경우는 Enter과 Change이므로, 이 경우에만 유저의 닉네임을 업데이트 해주면 된다.
유저별 마지막 닉네임을 확정지었다면, 유저의 마지막 닉네임이 반영된 로그를 출력해주기만 하면 된다.
소스 코드
#include <string>
#include <vector>
#include <iostream>
#include <map>
using namespace std;
map<string, string> m;
vector<string> log[100001];
vector<int> space;
string str, action, uid;
vector<string> solution(vector<string> record) {
vector<string> answer;
for (int i=0;i<record.size();i++) {
// 문자열을 상태, uid, 닉네임으로 분리
str = record[i];
for (int j=0;j<str.length();j++) if(str[j]==' ') space.push_back(j);
log[i].push_back(str.substr(0, space[0]));
if(log[i][0]=="Leave") log[i].push_back(str.substr(space[0]+1)); // Leave의 경우에는 상태, uid로만 분리
else {
log[i].push_back(str.substr(space[0]+1,space[1]-(space[0]+1)));
log[i].push_back(str.substr(space[1]+1));
}
space.clear();
// 유저의 닉네임을 바로바로 업데이트
action=log[i][0]; uid=log[i][1];
if(action=="Enter" || action=="Change") m[uid]=log[i][2];
}
for (int i=0;i<record.size();i++) {
action=log[i][0]; uid=log[i][1];
if(action=="Enter") {
answer.push_back(m[uid]+"님이 들어왔습니다.");
}
if(action=="Leave") {
answer.push_back(m[uid]+"님이 나갔습니다.");
}
}
return answer;
}
테스트케이스 32개 모두 정답
반응형
'Algorithm > 기타 알고리즘' 카테고리의 다른 글
[구간합] 쿠키 구입 - Summer/Winter Coding(~2018) (0) | 2022.05.01 |
---|---|
[시뮬레이션] 스킬트리 - Summer/Winter Coding(~2018) (0) | 2022.04.29 |
[수학] 멀쩡한 사각형 - Summer/Winter Coding(2019) (0) | 2022.04.22 |
[시뮬레이션] 행렬 테두리 회전하기 - 2021 Dev-Matching (0) | 2022.03.27 |
[투 포인터] 보석 쇼핑 - 2020 카카오 인턴십 (0) | 2022.03.20 |
댓글