1️⃣서론
프로그래머스 level2 문제 오픈채팅방
입니다.
Javascript
를 이용하여 해결하였습니다.
2️⃣문제 설명
3️⃣풀이
보통의 채팅방 과는 달리 이 문제는 마지막에 보일 결과만을 출력해주면 되므로 이런 측면으로 접근하였을때 좀더 쉽게 풀 수 있습니다. 풀이는 다음과 같습니다.
- 먼저 배열을 하나 생성해 2차원 배열로 split을 한다.
- 그 후 기록의 마지막 닉네임을 아이디와 매칭합니다. (여기서 Enter와 Change 가 length가 3임을 이용하면 더 쉽게 접근할 수 있습니다.)
- 그후 닉네임을 통해 출력합니다.
4️⃣ 내가 푼 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const solution = (record) => {
let answer = [];
//1. 먼저 배열을 하나 생성해 2차원 배열로 split을 한다.
let newArr = record.map((str) => str.split(" "));
//2. 그 후 기록의 마지막 닉네임을 아이디와 매칭합니다.
//2.1 여기서 Enter와 Change 가 length가 3임을 이용하면 더 쉽게 접근할 수 있습니다.
let nickNameSet = {};
for (let i = 0; i < newArr.length; i++) {
if (newArr[i].length === 3) {
nickNameSet[newArr[i][1]] = newArr[i][2];
}
}
//3. 그후 닉네임을 통해 출력합니다.
for (let i = 0; i < newArr.length; i++) {
if (newArr[i][0] === "Enter") {
answer.push(nickNameSet[newArr[i][1]] + "님이 들어왔습니다.");
} else if (newArr[i][0] === "Leave") {
answer.push(nickNameSet[newArr[i][1]] + "님이 나갔습니다.");
}
}
return answer;
};
5️⃣ 결론
저는 맨처음에 풀었을 때 위처럼 쉬운 코드를 생각하지 못하고 배열이 진행될때마다 닉네임을 바꿔주고 출력문을 바꿔주었습니다. 이렇게 어렵게 접근하기 보다는 출력을 한번에 한다는 점을 깨닫고 미리 닉네임을 바꾸고 다시 처음부터 돌아가서 출력을 하면 쉽게 해결할 수 있었던 문제인 것 같습니다.
6️⃣ 마치며..
질문과 지적은 환영합니다. 이 문제는 최적의 정답일 수도 아닐수도 있습니다.
궁금한게 있으시면 아래 댓글 남겨주세요.🙏
댓글은 저에게 큰 힘이 됩니다!
감사합니다. ❤️