[프로그래머스] 오픈채팅방 (자바스크립트/js/javascript)

2021. 6. 24. 14:44Front-end/알고리즘

728x90
반응형

문제출처: https://programmers.co.kr/learn/courses/30/lessons/42888

 

코딩테스트 연습 - 오픈채팅방

오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오

programmers.co.kr

 

 

 

문제를 풀기 위한 아이디어

문제 설명은 장황하지만 결국 포인트는, 닉네임을 먼저 확정짓고 그 다음에 맞는 유저 아이디의 닉네임을 불러오기만 하면 된다.

모든 record를 반복문으로 돌며 계속해서 유저 아이디에 맞는 닉네임을 갱신해주어서 먼저 닉네임을 확정짓는다.

이 경우 Leave인 경우는 닉네임이 바뀌지 않으므로 신경쓸 필요가 없다.

또 record를 한 번 더 반복문으로 돌면서 Enter와 Leave인 경우에만 맞는 닉네임을 불러와서 result에 넣어주면 된다. Change인 경우에는 result에 포함될 필요가 없기 때문에 처음에 닉네임 갱신할 때에만 봐주면 된다.

중복을 방지하고 키에 맞는 값을 저장하기 위해 map을 사용하면 된다.

 

function solution(record) {
  const answer = [];
  const map = new Map();
  for (let i = 0; i < record.length; i++) {
    const target = record[i].split(" ");
    if (target[0] === "Enter" || target[0] === "Change") {
      map.set(target[1], target[2]);
    }
  }
  for (let i = 0; i < record.length; i++) {
    const target = record[i].split(" ");
    if (target[0] === "Enter") {
      const string = map.get(target[1]) + "님이 들어왔습니다.";
      answer.push(string);
    } else if (target[0] === "Leave") {
      const string = map.get(target[1]) + "님이 나갔습니다.";
      answer.push(string);
    }
  }
  return answer;
}
const record = [
  "Enter uid1234 Muzi",
  "Enter uid4567 Prodo",
  "Leave uid1234",
  "Enter uid1234 Prodo",
  "Change uid4567 Ryan",
];
console.log(solution(record));
728x90
반응형