728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/42888?language=javascript 

 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

 

코드


function solution(record) {
    let answer = [];
    let user = {}; //userid, nickname을 담을 user객체
    
    //message[0] = message, message[1] = userid, message[2] = nickname
    for (let i=0; i<record.length; i++) {
        let message = record[i].split(" "); //record의 각 문장을 단어별로 잘라서 배열에 담기
        if (message[0] === "Enter" || message[0] === "Change") { //다시들어오는 경우라도 이 코드를 통해 닉네임이 새로 갱신됨
            user[message[1]] = message[2]; //userid: nicknmae <<이렇게 저장됨
        }
    }
    
    for (let i=0; i<record.length; i++) {
        let message = record[i].split(" ");
        if (message[0] === "Enter") { //객체에 저장된 userid의 nickname을 불러와서 출력
            answer.push(`${user[message[1]]}님이 들어왔습니다.`);
        }
        else if (message[0] === "Leave") {
            answer.push(`${user[message[1]]}님이 나갔습니다.`);
        }
    }

    return answer;
}

 

후기


  • 처음에 문제 접근을 잘못해서 한참을 헤맸다. 문제는 결국 최종적으로 찍히는 메시지만 출력하면 되는데 한명 한명 들어오고 나갈때마다 메시지를 출력해서 수정을 해나가는 방식으로 처음에 로직을 짰기 때문에 다시 들어오는 경우에 닉네임을 수정하는 과정이 까다로웠다
  • 결국 문제는 마지막에 메시지를 출력하면 되는 것이니 출력은 가장 나중으로 두고 풀었다. 객체와 배열의 성질을 잘 이용해서 userid, nickname의 정보를 담고 update도 동시에 가능하게 했다
  • 로직을 수정하고 나서는 꽤 수월하게 풀었지만 다른 분들의 풀이를 보니 map을 사용하여 푼 풀이가 많았다. 나는 아직 map에 익숙하지 않아서 그런지 봐도 이해가 잘 안됐다ㅜ.. 문법 공부를 좀 더 해야겠다!

+ Recent posts