서크호
서크호 - 개발 스토리
서크호
전체 방문자
오늘
어제
  • 분류 전체보기 (22)
    • TEAM 알고싶다 (17)
      • 성공 문제 (16)
      • 실패 문제 (1)
    • JavaScript (0)
    • TypeScript (0)
    • Node.js (2)
      • React.js (0)
      • Next.js (0)
      • NestJS (2)
    • Baekjoon (Node.Js) (1)
    • Error Box (1)
    • MySQL (1)
    • JAVA (0)
    • Andriod (0)
    • Spring Boot (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • NestJs Strategy
  • NestJs login
  • 백준 적록색약
  • Nest DB
  • NestJS ValidationPipe
  • Nest mysql
  • 10026
  • NestJs PassPort
  • 적록색약 javascript
  • NestJs session
  • 10026 node
  • 백준
  • javascript
  • Nest Typeormm
  • Nestjs
  • nodejs
  • 적록색약 nodejs

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
서크호

서크호 - 개발 스토리

TEAM 알고싶다/성공 문제

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

2022. 6. 9. 00:30

📄 문제

- 간단 설명

  • 채팅방에 들어오고 나가거나, 
  • 닉네임을 변경한 기록이 담긴 문자열 배열 record가 매개변수로 주어질 때,
  • 모든 기록이 처리된 후, 최종적으로 방을 개설한 사람이 보게 되는 메시지를
  • 문자열 배열 형태로 return 하도록 solution 함수를 완성하라.

 

- 형식 

  • 모든 유저는 [유저 아이디]로 구분한다.
  • [유저 아이디] 사용자가 [닉네임]으로 채팅방에 입장 - "Enter [유저 아이디] [닉네임]" (ex. "Enter uid1234 Muzi")
  • [유저 아이디] 사용자가 채팅방에서 퇴장 - "Leave [유저 아이디]" (ex. "Leave uid1234")
  • [유저 아이디] 사용자가 닉네임을 [닉네임]으로 변경 - "Change [유저 아이디] [닉네임]" (ex. "Change uid1234 Muzi")

- 주의점 

  • 닉네임 변경이 있어서 조금 복잡한 것 같다. 최종 변경 사항으로 모두 적용해서 출력해야 한다!
  • 닉네임 변경 방법 두가지
    • 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다.
    • 채팅방에서 닉네임을 변경한다.
     

입출력 예시


📝 나의 통과 풀이

function solution(record) {
  let answer = [];
  let state = new Map();
  record.forEach((user) => {
    let [type, userId, name] = user.split(" ");
    if (type == "Enter" || type == "Change") {
      state.set(userId, name);
    }
  });

  record.forEach((user) => {
    let [type, userId, name] = user.split(" ");
    if (type == "Enter") {
      let userIn = state.get(userId) + "님이 들어왔습니다.";
      answer.push(userIn);
    }
    if (type == "Leave") {
      let userOut = state.get(userId) + "님이 나갔습니다.";
      answer.push(userOut);
    }
  });

  return answer;
}

⌨ 접근법

1. new Map을 사용해서 id와 name 저장하기 위해 state 변수 선언

2. 반복문을 돌려서 record 의 각 요소마다 state 만들기

2-1. 공백을 기준으로 ( user.split(" ") ) 각 요소의 type, userId, name 변수로 나눠서 저장

2-2. 만약의 들어오는 type 이 "Enter" 이거나 "Change" 이면 state에 userid : name 으로 저장한다.

2-3. 그러면 userId 에 따라 name을 계속 업데이트 시켜서 최종 변경 이름까지 잘 들어간다!

3. 또 반복문을 돌려서 record의 요소 수 만큼 문자열을 만들어 answer에 넣어주기 (그냥 for 문법을 쓸 걸 그랬다.)

3-1. 2-1 처럼 공백을 기준으로 ( user.split(" ") ) 각 요소의 type, userId, name 변수로 나눠서 저장

3-2. 들어오는 type이 "Enter" 채팅방에 들어온 유저면 state 에서 userId 로 조회해 문자열 붙여서 answer에 push

3-3. 들어오는 type이 "Leave" 채팅방에서 나간 유저면 state 에서 userId 로 조회해 문자열 붙여서 answer에 push

3-4. 반복문이 모두 끝나면 문자열이 다 들어간 answer return


📖 배운 점 

1. Map

  • Map 사용이 서툴렀는데 이 문제로 계속 수정 반복 하다 보니 제법 익숙해진 것 같다!

2. 구조 분해 할당

  • 이 문제는 우리 팀의 레오의 코드를 참조해서 풀었다. 
  • 레오의 코드( const [type, uid, name] = item.split(' '); ) 를 나도 적용해보니 코드가 너무 깔끔해져서 놀랐다.
  • 앞으로도 자주 사용할 것 같다!

📚 문제 링크

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

 

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

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

programmers.co.kr

저작자표시 (새창열림)

'TEAM 알고싶다 > 성공 문제' 카테고리의 다른 글

[LeetCode] 152. Maximum Product Subarray(최대로 생성된 부분 배열?)  (0) 2022.06.14
[LeetCode] 41. First Missing Positive (처음 누락된 양수?)  (0) 2022.06.13
[프로그래머스] JavaScript - 구명보트  (0) 2022.06.06
[LeetCode] 4. Median of Two Sorted Arrays (정렬된 두 배열의 중앙값)  (0) 2022.06.03
[LeetCode] 34. Find First and Last Position of Element in Sorted Array (정렬된 배열에서 요소의 첫 번째 및 마지막 위치 찾기)  (0) 2022.06.01
    'TEAM 알고싶다/성공 문제' 카테고리의 다른 글
    • [LeetCode] 152. Maximum Product Subarray(최대로 생성된 부분 배열?)
    • [LeetCode] 41. First Missing Positive (처음 누락된 양수?)
    • [프로그래머스] JavaScript - 구명보트
    • [LeetCode] 4. Median of Two Sorted Arrays (정렬된 두 배열의 중앙값)
    서크호
    서크호
    팀 스터디 및 개인 개발 관련 블로그 입니다!

    티스토리툴바