[프로그래머스] 오픈채팅방 - javascript

Yongwoo Cho·2021년 10월 28일
0

알고리즘

목록 보기
31/104
post-thumbnail

📌 문제

https://programmers.co.kr/learn/courses/30/lessons/42888

📌 풀이

function solution(record) {
  let tmp = [];
  var answer = [];
  let hash_map = new Map();
  for (let i = 0; i < record.length; i++) {
    let arr = record[i].split(" ");
    if (arr[0] !== "Leave") hash_map.set(arr[1], arr[2]);
    if (arr[0] !== "Change") tmp.push([arr[0], arr[1]]);
  }
  for (let i = 0; i < tmp.length; i++) {
    if (tmp[i][0] == "Enter") {
      answer.push(`${hash_map.get(tmp[i][1])}님이 들어왔습니다.`);
    } else {
      answer.push(`${hash_map.get(tmp[i][1])}님이 나갔습니다.`);
    }
  }
  return answer;
}

✔ 알고리즘 : 문자열 + Hashing

✔ 이름은 결국 ID를 따라가므로 tmp에 ID를 저장한후 마지막에 변환하여 출력하는게 문제를 푸는 핵심이다

✔ Leave가 아니면 처음으로 id가 들어오는 Enter인 경우와 id와 연동된 닉네임을 변경하는 Change가 존재하므로 hash_map에 id를 key로 닉네임을 value로 저장한다

✔ Change가 아니면 모두 출력해야하는 상황이므로 tmp에 push한다

✔ Enter인 경우와 Leave인 경우가 현재 tmp에 있으므로 hash_map의 get함수를 통해 닉네임을 찾아서 ans에 push

✔ 난이도 : 프로그래머스 기준 LEVEL 2

profile
Frontend 개발자입니다 😎

0개의 댓글