https://programmers.co.kr/learn/courses/30/lessons/60057
1) 최종 id와 닉네임 내역을 저장할 nicknameInfo 객체를 만든다.
2) record를 반복문을 돌려, nicknameInfo에 각 아이디에 매칭되는 닉네임을 저장한다.
3) 아이디를 바꾸거나 새로 입장할 때마다 nicknameInfo를 갱신해준다.
4) record를 map을 통해 result와 같은 형태로 바꿔준다.
function solution(record) {
let idInfo = {};
for(let i = 0; i < record.length; i ++){
let infoArr = record[i].split(" ");
if(infoArr[0] === "Leave"){
continue;
}
idInfo[infoArr[1]] = infoArr[2];
}
let resultArr = record.map(item => {
let infoArr = item.split(" ");
if(infoArr[0] === "Enter"){
return `${idInfo[infoArr[1]]}님이 들어왔습니다.`
} else if(infoArr[0] === "Leave"){
return `${idInfo[infoArr[1]]}님이 나갔습니다.`
}
})
return resultArr.filter(item => item);
}
function solution(record) {
const userInfo = {};
const action = [];
const stateMapping = {
'Enter': '님이 들어왔습니다.',
'Leave': '님이 나갔습니다.'
}
record.forEach((v) => {
// 구조분해 할당으로 한 번에 펼치기! (어려운 부분이 아니니 습관을 들이자!)
const [state, id, nick] = v.split(' ');
// state가 "Change"인 경우를 미리 제거한다.
if(state !== "Change") {
action.push([state, id]);
}
// 나는 state가 "Leave"가 아니면으로 접근했는데,
// 이 경우 닉네임이 있느냐 없느냐로 접근하고 있다.
if(nick) {
userInfo[id] = nick;
}
})
return action.map(([state, uid]) => {
return `${userInfo[uid]}${stateMapping[state]}`;
})
}