https://programmers.co.kr/learn/courses/30/lessons/42888
채팅방 안에서 변경 또는 재입장 시 닉네임이 변경되었다면
기존에 출력된 입장, 퇴장문의 닉네임에도 소급 적용해야하는 문제이다.
반복문을 최대한 줄이고 싶었지만
최종 닉네임을 알기 위해 1차례, 최종 닉네임을 반영하여 입퇴장 내역을 재출력해야하므로 최소 두 번의 반복문을 필요했다.
record를 공백 기준으로 split한 뒤 인덱스를 이용해 사용했었는데 state, uid, name으로 변수명을 설정해주니 훨씬 직관적인 코드가 되었다.
Change와 Enter는 둘 다 닉네임에 영향을 주지만 출력 순서에는 Enter만 반영된다. 그 점을 이용하여 finalName[uid]
에 name을 할당하는 코드는 공통으로 적용하였다.
Leave 시에도 name을 할당하는 구문을 실행하면 undefined가 할당되어 문제가 된다. continue를 이용하여 해당 구문을 건너뛰도록 처리해주었다.
function solution(record) {
const answer = [];
const finalName = {};
for (let i = 0; i < record.length; i++) {
const [state, uid, name] = record[i].split(" ");
if (state === "Leave") {
answer.push([uid,"님이 나갔습니다."]);
continue;
};
if (state === "Enter") {
answer.push([uid,"님이 들어왔습니다."]);
};
finalName[uid] = name;
}
return answer.map(elem => finalName[elem[0]] + elem[1]);
}