프로그래머스 오픈채팅방 - js

fgStudy·2022년 5월 29일
0

코딩테스트

목록 보기
52/69
post-thumbnail

해당 포스팅은 프로그래머스 오픈채팅방 풀이를 다룬다. 문제 링크
코드는 javascript로 작성하였으며 구현 문제이다.


풀이

  • 채팅방 기록은 Enter와 Leave만 남는다. Change는 기록에 남지 않는다.
    따라서 Enter와 Leave일 때만 배열(answer)에 넣어준다.

  • 닉네임이 바뀌면 이전의 채팅방 기록의 닉네임을 변경해주어야 한다.

  • 따라서 아이디와 닉네임은 해시(user)로 관리하고, 채팅방 기록을 넣는 배열에는 아이디값과 입장/퇴장 시 출력하는 문구를 배열로 넣어준다.

  • Enter와 Change일 때마다 유저 아이디 key의 value(닉네임)를 설정한다. 이전에 등록되지 않은 아이디일 경우 key-value 쌍을 추가하고, 등록된 아이디일 경우 value(닉네임)을 수정하게 된다.

  • 채팅방 기록을 리턴할 때 배열의 요소를 loop돌리면서 배열의 아이디와 일치하는 닉네임으로 바꿔준다.


전체 코드

function solution(record) {
    var answer = []; // 채팅방 기록을 담는 배열
    const user = {}; // 아이디와 닉네임을 저장하는 해시
	
    const splitRecode = record.map(el => el.split(" "));
    // recode loop돌리기
  	// ex. ["Enter", "uid1234", "Muzi"]
  	for (let el of splitRecode) {
        // Enter
      	if (el[0] === 'Enter') {
            // [유저 아이디, "님이 들어왔습니다."]
          	answer.push([el[1], "님이 들어왔습니다."]);
        }
      	// Leave
        else if (el[0] === 'Leave') {
            // [유저 아이디, "님이 나갔습니다."]
          	answer.push([el[1], "님이 나갔습니다."]);
            continue;
        }
      	// Enter, Change 시
      	// 유저 아이디 key - 유저 닉네임 value 쌍
        user[el[1]] = el[2];
    }
  	// 채팅방 기록 return
  	// user에 기록된 닉네임 + "들어왔습니다"/"나갔습니다"
    return answer.map(el => user[el[0]] + el[1]);
}
profile
지식은 누가 origin인지 중요하지 않다.

0개의 댓글