[프로그래머스 레벨투] 오픈채팅방 🐭🐹

9rganizedChaos·2021년 10월 1일
0
post-thumbnail

🔽 문제 링크

https://programmers.co.kr/learn/courses/30/lessons/60057

✍🏼 나의 수도 코드

  1) 최종 id와 닉네임 내역을 저장할 nicknameInfo 객체를 만든다.
  2) record를 반복문을 돌려, nicknameInfo에 각 아이디에 매칭되는 닉네임을 저장한다.
  3) 아이디를 바꾸거나 새로 입장할 때마다 nicknameInfo를 갱신해준다.
  4) record를 map을 통해 result와 같은 형태로 바꿔준다.

👨🏻‍💻 나의 문제 풀이

function solution(record) {
    
    let idInfo = {};
    for(let i = 0; i < record.length; i ++){
        let infoArr = record[i].split(" ");
        if(infoArr[0] === "Leave"){
            continue;
        }
        idInfo[infoArr[1]] = infoArr[2];
    }
    
    let resultArr = record.map(item => {
        let infoArr = item.split(" ");
        if(infoArr[0] === "Enter"){
            return `${idInfo[infoArr[1]]}님이 들어왔습니다.`
        } else if(infoArr[0] === "Leave"){
            return `${idInfo[infoArr[1]]}님이 나갔습니다.`
        } 
    })
    
    return resultArr.filter(item => item);
}

👩🏻‍💻 다른 사람의 코드

function solution(record) {
    const userInfo = {};
    const action = [];
    const stateMapping = {
        'Enter': '님이 들어왔습니다.',
        'Leave': '님이 나갔습니다.'
    }

    record.forEach((v) => {
        // 구조분해 할당으로 한 번에 펼치기! (어려운 부분이 아니니 습관을 들이자!)
        const [state, id, nick] = v.split(' ');

        // state가 "Change"인 경우를 미리 제거한다.
        if(state !== "Change") {
            action.push([state, id]);
        }

        // 나는 state가 "Leave"가 아니면으로 접근했는데,
        // 이 경우 닉네임이 있느냐 없느냐로 접근하고 있다.
        if(nick) {
            userInfo[id] = nick;
        }
    })

    return action.map(([state, uid]) => {
        return `${userInfo[uid]}${stateMapping[state]}`;    
    })
}

🍯 알게 된 것들

  • 구조분해 할당 사용하자...!
profile
부정확한 정보나 잘못된 정보는 댓글로 알려주시면 빠르게 수정토록 하겠습니다, 감사합니다!

0개의 댓글