for (const r of record) {
let line = [];
line = r.split(" ");
cmd.push([line[0], line[1]]);
nickName_map.set(line[1], line[2]);
}
["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"]
다음과 같이 입력문이 들어오는 상황에 있어서 다음과 같이 분리하려고 하였으나 Leave(퇴장) 메시지 때문에 오류 발생
→ Leave 상태일 때는 닉네임 정보(line[2])가 들어오지 않기 때문에, 현재 코드대로라면 Map의 닉네임이 undefined로 덮어씌워질 수 있음
닉네임 정보가 존재하는
Enter와Change일 때만Map을 업데이트해야 함
function solution(record) {
const cmd = [];
const nickName_map = new Map();
for (const r of record) {
let line = [];
const [action, uid, nickname] = r.split(" ");
if (action !== "Leave") {
nickName_map.set(uid, nickname);
}
// 출력해야 하는 메시지는 Enter와 Leave뿐이므로 따로 관리
if (action !== "Change") {
cmd.push([action, uid]);
}
}
// console.log(cmd);
// console.log(nickName_map);
var answer = [];
for (let i = 0; i < cmd.length; i++) {
let str = "";
if (cmd[i][0] === "Enter") {
let nickname = nickName_map.get(cmd[i][1]);
str = `${nickname}님이 들어왔습니다.`;
} else if (cmd[i][0] === "Leave") {
let nickname = nickName_map.get(cmd[i][1]);
str = `${nickname}님이 나갔습니다.`;
} else if (cmd[i][0] === "Change") {
continue;
}
answer.push(str);
}
return answer;
}