TIL 85 | 오픈채팅방 JS

Gom·2021년 6월 9일
0

Algorithm

목록 보기
42/48
post-thumbnail

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]);
}
profile
안 되는 이유보다 가능한 방법을 찾을래요

0개의 댓글