[프로그래머스] 오픈채팅방 - JavaScript

이은빈 EUNBIN·2021년 1월 21일
0

📌 문제

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

📌 나의 풀이 (테스트 통과 실패)

function solution(record) {
    let splitRecord = []
    let chattingBox = [];
    let result = [];
    
    record.forEach(user => {
        splitRecord.push(user.split(" "))
    });
    
    for(let i = 0; i < splitRecord.length; i++) {
        if(splitRecord[i][0] == "Enter") {
            if(chattingBox.length == 0) { // 유저가 채팅방에 최초로 들어올 경우
                chattingBox.push(splitRecord[i]);
            } else { // 채팅방에 이미 유저가 있는 경우
                chattingBox.map(user => {
                    user[1] !== splitRecord[i][1] // 채팅방에 온 적이 없는 유저면
                        ? chattingBox.push(splitRecord[i]) // 해당 유저를 채팅방 배열에 저장
                        : user[2] = splitRecord[i][2] // 온 적 있는 유저면 새로운 정보로 저장
                });
            }
        }
        if(splitRecord[i][0] == "Change" && chattingBox.length > 0) {
            chattingBox.map(user => {
                user[1] == splitRecord[i][1] 
                    ? user[2] = splitRecord[i][2]
                    : user
                });
        }
        if(splitRecord[i][0] == "Leave") {
            chattingBox.push(splitRecord[i]);
        }
    }
    
    chattingBox.map(user => {
        if(user[0] == "Enter") {
            result.push(`${user[2]}님이 들어왔습니다.`);
        }
        if(user[0] == "Leave") {
            result.push(`${user[2]}님이 나갔습니다.`);
        }
    });
    
    return result;
}

유저 아이디와 닉네임만 체크를 하여 Enter와 Leave로 구분해서 출력해주면 되었는데
나는 Enter, Change, Leave를 먼저 체크하면서
채팅방에 온 적이 있는 유저를 확인하는 방식으로 코드를 짰다

너무 복잡하게 경우를 나눠버렸다..
다른 분들 코드 보니까 내 코드 엄청 지저분 🤦‍♀️
저러니 시간초과가 뜨지..😭


여기까진 기분 좋았다 :) .....
언젠가는 한번에 뙇 테스트를 통과하는 날이 오겠지? 🤧

📌 풀이

https://velog.io/@sso/프로그래머스-javascript-오픈채팅방
https://kyun2da.github.io/2020/07/05/openchat/

profile
Frontend Engineer & Value Creator

0개의 댓글