본문 바로가기
Coding Test/JavaScript

[Javascript] (프로그래머스 level 2) 오픈채팅방

by Chaedie 2022. 7. 1.
728x90

[Javascript] (프로그래머스 level 2) 오픈채팅방

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

내 풀이

function solution(record) {
    // command에 기록을나눠서 저장 (편하게)
    const command = record.map((x) => x.split(' '));
    const idNick = new Map(); // userMap = {id, nick}
    const idLastLeave = new Map(); // idLastLeave = {id, lastLeave}
    for (let [com, id, nick] of command) {
        // id 기록 없으면 추가 (닉, 마지막 나간 인덱스)
        if (com === "Enter") {
            idNick.set(id, nick);
            idLastLeave.set(id, -1);
        } else if (com === "Leave") {
            idLastLeave.set(id, 1);
        } else if (com === "Change") {
            idNick.set(id, nick);
        }//35분 지났고, 밥먹으로감
    }

    const result = [];
    command.forEach((x) => {
        if (x[0] === "Enter") {
            result.push(`${idNick.get(x[1])}님이 들어왔습니다.`);
        } else if (x[0] === "Leave") {
            result.push(`${idNick.get(x[1])}님이 나갔습니다.`);
        }})

    return result
}

다른 사람 풀이

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

    record.forEach((v) => {
        const [state, id, nick] = v.split(' ');

        if(state !== "Change") {
            action.push([state, id]);
        }

        if(nick) {
            userInfo[id] = nick;
        }
    })

    return action.map(([state, uid]) => {
        return `${userInfo[uid]}${stateMapping[state]}`;    
    })
}
  • 배운 점, 느낀 점

  • 처음에 문제를 잘못 이해해서 쓸데없이 훨씬 더 많은 요구사항을 만족시키고자 노력했다. 근 50분간 그렇게 구현하다. 자꾸 “맞왜틀” 하다가 문제를 다시 읽어보니 예외케이스가 없다는걸 알게되었다. 그리고 예외처리를 모두 빼니 맞더라 하.. 🤣🤣

  • ㄹ처음으로 풀어보는 프로그래머스 레벨2 문제라 뭔가 엄~청 어려울거라고 생각했던게 패배요인인것같다. 오히려 레벨1 문제보다 쉬웠다.

  • if else if 진짜 보기 안좋다. ㅋㅋ 다른 사람풀이를 통해 object로 switch문처럼 사용할수 있다는걸 배웠다.

풀이 시간

  • 55분 걸렸다. 문제를 꼼꼼히 잘 읽어야겠다.

댓글