문제
카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다.
신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다.
"[닉네임]님이 들어왔습니다."
채팅방에서 누군가 나가면 다음 메시지가 출력된다.
"[닉네임]님이 나갔습니다."
채팅방에서 닉네임을 변경하는 방법은 다음과 같이 두 가지이다.
채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다.
채팅방에서 닉네임을 변경한다.
닉네임을 변경할 때는 기존에 채팅방에 출력되어 있던 메시지의 닉네임도 전부 변경된다.
📌 풀이
1차 풀이
function solution(record) {
record = record.map(v => v.split(' '));
let obj = {};
for(let i = 0; i < record.length; i++) {
let v = record[i];
if(v[0] !== 'Leave') obj[v[1]] = v[2];
}
let answer = [];
for(let i = 0; i < record.length; i++) {
let v = record[i];
if(v[0] === 'Enter') answer.push(`${obj[v[1]]}님이 들어왔습니다.`)
else if(v[0] === 'Leave') answer.push(`${obj[v[1]]}님이 나갔습니다.`)
}
return answer;
}
for문을 두 번 돌려 해결했다.
첫 번째로 Enter
과 Change
를 찾아 아이디와 닉네임을 객체에 저장하고
(Leave
는 찾을 필요 없음. 찾아서 삭제할 필요도 없다.
만약 찾아서 값을 삭제한다면 두 번째 순회로 문장을 출력할 때 닉네임을 찾을 수 없기 때문)
두 번째로 순회하며 문장을 배열에 저장했다.
- 정확도 테스트 결과
2차 풀이
function solution(record) {
record = record.map(v => v.split(' ')); // 배열로 변환
let obj = {};
record.forEach(v => { // 객체에 id : nickname 저장
if(v[0] !== 'Leave') obj[v[1]] = v[2];
} )
let answer = [];
record.forEach(v => { // 출력 문구 저장
if(v[0] === 'Enter') answer.push(`${obj[v[1]]}님이 들어왔습니다.`)
else if(v[0] === 'Leave') answer.push(`${obj[v[1]]}님이 나갔습니다.`)
})
return answer;
}
for문을 forEach
메서드로 간결하게 수정했다.
'Coding test' 카테고리의 다른 글
[프로그래머스] 문자열 압축 (Lv 2) - javascript (0) | 2022.05.27 |
---|---|
[프로그래머스] 괄호 회전하기 (Lv 2) - javascript (0) | 2022.05.25 |
[프로그래머스] 짝지어 제거하기 (Lv 2) - javascript (0) | 2022.05.24 |
[프로그래머스] 모음사전 (Lv 2) - javascript / dfs (0) | 2022.05.24 |
[프로그래머스] n개의 최소공배수 (Lv 2) - javascript (0) | 2022.05.23 |