[프로그래머스] 42888 오픈채팅방 JavaScript
problem-solving프로그래머스해시구현
📌 문제 설명
📌 문제 접근
단순하게 빠르게 아이디로 찾아서 갱신만 해주는 되는 문제. record가 100000이 최대기 때문에 array로 2번 돌면 시간 초과 날 것이라고 판단하였다. 그래서 Map으로 O(1)로 찾고 한바퀴 돌면 O(n)이기 때문에 충분하다고 판단했다.
📌 내가 작성한 코드
function solution(record) {
const user_map = new Map();
for (const r of record) {
const [type, id, nickName] = r.split(" ");
if (type === "Enter" || type === "Change") user_map.set(id, nickName);
}
return record.reduce((acc, cur) => {
const [type, id, nickName] = cur.split(" ");
if (type === "Enter") acc.push(`${user_map.get(id)}님이 들어왔습니다.`);
else if (type === "Leave") acc.push(`${user_map.get(id)}님이 나갔습니다.`);
return acc;
}, []);
}
📌 시간 복잡도
- 전체 레코드를 1번 순회하며 닉네임을 갱신하고, 다시 1번 순회하며 결과를 만들기 때문에
2* O(N)

