프로그래머스 - 오픈채팅방(자바스크립트)

코딩아재·2021년 10월 14일
0

코딩 테스트

목록 보기
2/2

안녕하세요 코딩하는 아재입니다.

오늘부터 코테 리뷰를 해보려고 합니다.

아직 초보라서 다른 개발자분 들의 코드를 분석해서 혼자 해결할 수 있게 하는게 목표입니다.

그럼 시작하겠습니다.

문제

프로그래머스-오픈채팅방 문제(자바스크립트)

  • 전체 코드
function solution(record) {
    var answer = [];
    
    //1. 새로운 배열을 만들어줌
    let arr = record.map(a => a.split(' '));
  
    // 2. uid와 닉네임 매치
    let newArr = {};
    for(let i = 0; i <arr.length; i++) {
        if(arr[i].length === 3) {
            newArr[arr[i][1]] = arr[i][2];
        }
    }
  
    // 3. 출력
    for(let i = 0; i<arr.length; i++){
        if(arr[i][0] === 'Enter'){
            answer.push(`${newArr[arr[i][1]]}님이 들어왔습니다.`);
        } else if(arr[i][0] === 'Leave'){
            answer.push(`${newArr[arr[i][1]]}님이 나갔습니다.`);
        }
    }
    return answer;
}

코드 분석

1. 새로운 배열 생성

    let arr = record.map(a => a.split(' '));
  • map과 split을 사용하여 새로운 배열을 만듦.
    이유:
    문제에서 주어진 record는 아래와 같이 주어집니다.

    ["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"]

record를 map으로 돌리면서 split(' ')를 해주면 아래와 같이 새로운 배열이 주어집니다.
주의: spilit('') <- 이렇게 하지 말것!!! 이렇게 ' ' 사이를 한칸 띄어야 합니다.

let arr = [
  [ 'Enter', 'uid1234', 'Muzi' ],
  [ 'Enter', 'uid4567', 'Prodo' ],
  [ 'Leave', 'uid1234' ],
  [ 'Enter', 'uid1234', 'Prodo' ],
  [ 'Change', 'uid4567', 'Ryan' ]
]

위와 같이 배열 안에 또 배열을 생성하고 각각의 값들을 하나씩 분리해 줌으로써 값을 쉽게 선택할 수 있게 됩니다.
로그를 찍어 보면 아래와 같이 사용할 수 있게 됩니다.
ex) record와 arr 비교.

console.log 내용console.log 결과
recordrecord[0][0]E
arr arr[0][0]Enter

2. 유저아이디에 닉네임 넣기

let newArr = {};
   for(let i = 0; i <arr.length; i++) {
       if(arr[i].length === 3) {
           newArr[arr[i][1]] = arr[i][2];
       }
   }
  • 새롭게 만든 newArr의 객체 안에 유저아이디에 닉네임 값을 대입 시켜줌.
    이유: 모든 유저는 유저아이디를 구분해주기 위해서이다.
    새롭게 만든 newArr 오브젝트는 아래처럼 name은 유저아이디, value는 닉네임이 되었다.
  • arr[i].length === 3 <- if의 조건을 이렇게 한 이유는 Leave할 때는 undefind가 나오기 때문에 예외 처리를 해주었습니다.
let newArr = { uid1234: 'Prodo', uid4567: 'Ryan' }

3. 출력

for(let i = 0; i<arr.length; i++){
        if(arr[i][0] === 'Enter'){
            answer.push(`${newArr[arr[i][1]]}님이 들어왔습니다.`);
        } else if(arr[i][0] === 'Leave'){
            answer.push(`${newArr[arr[i][1]]}님이 나갔습니다.`);
        }
    }
  • 출력을 하기 위해 Enter와 Leave로 조건을 나눴습니다.
  • 처음에는 Change는 왜 조건을 안넣나 헤메고 있었습니다. 그런데 유저 아이디에 닉네임값을 넣어 줌으로써 Change가 이미 되었기 때문이 었습니다.
    console.log를 찍으면서 하니 이유를 알 수 있었죠. 역시 콘솔로그는 소중함을 느끼는 순간이었습니다.
profile
코딩하는 아재입니다.

0개의 댓글

관련 채용 정보