8000 Add 오픈채팅방.js · aydenote/programmers-coding-test@7be050c · GitHub
[go: up one dir, main page]

Skip to content

Commit 7be050c

Browse files
committed
Add 오픈채팅방.js
1 parent 59032a4 commit 7be050c

File tree

1 file changed

+45
-1
lines changed

1 file changed

+45
-1
lines changed

level-2/오픈채팅방.js

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,48 @@ function solution(record) {
3636
map.set(uid, name);
3737
}
3838
return answer.map(ele => map.get(ele[0]) + ele[1]);
39-
}
39+
}
40+
41+
//정답 3 - chaerin-dev
42+
function solution(record) {
43+
// 최종 메시지를 저장할 배열
44+
let result = [];
45+
// 채팅방을 출입하는 유저의 아이디를 차례로 저장할 배열
46+
let resultId = [];
47+
// 유저의 아이디: 닉네임 쌍을 저장할 Map
48+
let idNameMap = new Map();
49+
50+
// record의 각 문자열을 띄어쓰기 단위로 나눠 배열로 변환
51+
record = record.map((e) => e.split(" "));
52+
53+
// record의 각 요소에 대해
54+
record.forEach((e) => {
55+
// 각 요소의 첫 번째 요소(Enter/Leave/Change)가
56+
switch (e[0]) {
57+
// Enter이면
58+
case "Enter":
59+
// resultID 배열에 들어온 유저의 아이디 저장
60+
resultId.push(e[1]);
61+
// result 배열에 닉네임을 제외하고 표시될 메시지 저장
62+
result.push("님이 들어왔습니다.");
63+
// idNameMap Map에 유저의 아이디: 닉네임 쌍 저장
64+
idNameMap.set(e[1], e[2]);
65+
break;
66+
// Leave이면
67+
case "Leave":
68+
// resultID 배열에 들어온 유저의 아이디 저장
69+
resultId.push(e[1]);
70+
// result 배열에 닉네임을 제외하고 표시될 메시지 저장
71+
result.push("님이 나갔습니다.");
72+
break;
73+
// Change이면
74+
case "Change":
75+
// idNameMap Map에 유저의 아이디에 해당하는 닉네임 변경
76+
idNameMap.set(e[1], e[2]);
77+
break;
78+
}
79+
});
80+
81+
// resultId의 각 요소에 해당하는 닉네임을 idNameMap에서 찾아서 result의 각 요소와 이어붙인 값 배열 반환
82+
return result.map((e, i) => idNameMap.get(resultId[i]) + e);
83+
}

0 commit comments

Comments
 (0)
0