[PGS] 42888. 오픈채팅방

레몬커드요거트·2026년 4월 29일

코딩테스트준비

목록 보기
59/66
post-thumbnail

오류 원인

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로 덮어씌워질 수 있음

닉네임 정보가 존재하는 EnterChange일 때만 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;
}
profile
비요뜨 최고~

0개의 댓글