[코테] 문제풀기 #6

Yuno·2021년 7월 2일
1
post-thumbnail

오픈채팅방

오픈채팅방에서는 가상 이름을 사용합니다.

사용자가 참가하면, 다음 메세지가 출력됩니다.

  • "[닉네임]님이 들어왔습니다."

사용자가 나가면, 다음 메세지가 출력됩니다.

  • "[닉네임]님이 나갔습니다."

채팅방에서 닉네임을 변경하는 방법은 2가지입니다.

  • 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다.
  • 채팅방에서 닉네임을 변경한다.

닉네임이 바뀌면, 이전에 출력되었던 메세지의 닉네임도 변경됩니다.

아래와 같은 방식으로 레코드가 주어질 때 출력할 메세지를 반환합니다.

  • [유저 아이디] 사용자가 [닉네임]으로 채팅방에 입장
    "Enter [유저 아이디][닉네임]" (ex. "Enter uid1234 Muzi")

  • [유저 아이디] 사용자가 채팅방에서 퇴장
    "Leave [유저 아이디]" (ex. "Leave uid1234")

  • [유저 아이디] 사용자가 닉네임을 [닉네임]으로 변경
    "Change [유저 아이디][닉네임]" (ex. "Change uid1234 Muzi")

풀이방법

이름이 변경되면 메세지도 바뀐 닉네임으로 변경되기 때문에,
최종적으로 변경된 사용자의 닉네임을 Map으로 저장하고,
메세지를 출력한다.

풀이

이름이 변경되는 경우는, Enter 혹은, Change이다.
그 때, user를 set한다.

메세지를 출력하는 경우는 Enter 혹은, Leave이다.
사용자의 이름은 user 맵에서 가져온다.

function solution(record) {
    const message = [];
    const user = new Map();

    record.forEach(r=>{
        const [oper,id,name] = r.split(' ');
        
        if(oper == 'Leave') return;

        user.set(id,name);
    });

    for (const r of record) {
        const [oper,id] = r.split(' ');
        const name = user.get(id);

        if(oper == 'Enter') {
            message.push(`${name}님이 들어왔습니다.`);
        }
        else if(oper == 'Leave') {
            message.push(`${name}님이 나갔습니다.`);
        }
    }

    return message;
}
profile
web frontend developer

0개의 댓글