본문 바로가기
Algorithm/문제풀이

[프로그래머스] 오픈 채팅방(LV.2) by javascript - 2019 KAKAO BLIND RECRUITMENT

by 썸머워즈 2022. 3. 11.
반응형

▷ 문제 : 2019 KAKAO BLIND RECRUITMENT - 오픈 채팅방 LV.2

 

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

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

programmers.co.kr

▷ 해결 날짜 : 2022.02.11
▷ 소요 시간 : 1시간 10분
▷ 풀이 과정 :
채팅방의 출력 메시지를 담아서 반환 시켜주어야 한다.

다른 문제들과 마찬가지로 문제를 우선 이해하고 그다음에 구현을 들어가야만 한다.

 

우선 주어지는 값은 문자열 배열에 "상태, 아이디, 닉네임" 이 주어진다는것을 파악하고,

몇가지 제한사항을 파악한뒤 문제를 해결해 나갔다.

 

읽어보니 핵심은 다음과 같았다.

1. 유저 아이디는 고유하다.

2. 닉네임은 중복이 가능하다.

3. 닉네임은 변경이 가능하고 변경 시 기존의 메시지가 전부 변경된 닉네임으로 출력된다.

4. 메시지 출력은 들어왔다 나갔다만 존재한다. (변경됐다는 메시지는 필요없다.)

 

그래서 구현 과정은 우선 아이디와 최종 닉네임을 매칭시켜 담아준 뒤,

"Change" 상태를 제외한 나머지 행위에 대해서만 메시지를 출력시켜주었다.


▷ 구현

function solution(record) {
    let nicknames = record.reduce((a, c) => {
        let [state, id, nickname] = c.split(' ');
        if(nickname) a.set(id, nickname)
        return a;
    }, new Map());

    return record.filter(e => ['Enter', 'Leave'].includes(e.split(' ')[0])).map(e => {
        let info = e.split(' ');
        return `${nicknames.get(info[1])}님이 ${info[0] == 'Enter' ? '들어왔습니다.' : '나갔습니다.'}`;
    });
}


▷ 복기 :
이번에도 특별한 알고리즘은 필요없었고 그냥 문제를 잘 이해하고 그 이해를 바탕으로 구현을 하면 되는 문제였다.

그렇다고 마냥 쉽기만 한건 아닌데, 문제를 유심히 봐야했기 때문이였다.

 

구현을 마치고 일단 통과는 하였는데 마지막 25~32 테스트 케이스에서 200ms가 초과하는걸 보아하니 성능 측면에서는 그다지 좋은거 같지는 않다.

 

단순화 시키려다 보니 성능에는 많이 신경을 못썼는데, 앞으로는 성능도 같이 고려해 봐야겠다.

반응형


댓글

TOP