[프로그래머스/Javascript] 오픈채팅방

알고리즘

Posted by Kyun2da on July 5, 2020

1️⃣서론

프로그래머스 level2 문제 오픈채팅방입니다. Javascript를 이용하여 해결하였습니다.

2️⃣문제 설명

오픈채팅방1 오픈채팅방2 오픈채팅방3

3️⃣풀이

보통의 채팅방 과는 달리 이 문제는 마지막에 보일 결과만을 출력해주면 되므로 이런 측면으로 접근하였을때 좀더 쉽게 풀 수 있습니다. 풀이는 다음과 같습니다.

  1. 먼저 배열을 하나 생성해 2차원 배열로 split을 한다.
  2. 그 후 기록의 마지막 닉네임을 아이디와 매칭합니다. (여기서 Enter와 Change 가 length가 3임을 이용하면 더 쉽게 접근할 수 있습니다.)
  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️⃣ 마치며..

질문과 지적은 환영합니다. 이 문제는 최적의 정답일 수도 아닐수도 있습니다.
궁금한게 있으시면 아래 댓글 남겨주세요.🙏
댓글은 저에게 큰 힘이 됩니다!
감사합니다. ❤️