본문 바로가기
👩‍💻 Programming/Coding Test 문제 풀이

[Programmers] level 2: 오픈채팅방 by JavaScript

by codingBear 2022. 7. 1.
728x90
반응형

 이번 글은 아래 링크의 글들을 참조하여 작성하였습니다.

https://tech.kakao.com/2018/09/21/kakao-blind-recruitment-for2019-round-1/

 

2019 카카오 신입 공채 1차 코딩 테스트 문제 해설

작년에 이어 올해도 블라인드 전형으로 카카오 개발 신입 공채가 시작되었습니다! 그 첫 번째 관문으로 1차 온라인 코딩 테스트가 지난 9월 15일(토) 오후 2시부터 7시까지 5시간 동안 치러졌는데

tech.kakao.com


 이번 문제에 대한 자세한 사항은 다음 링크를 참조하길 바란다.

 

 처음에는 새로 생성한 객체에 for문으로써 record의 정보를 모두 담아 처리해보려고 했으나 잘 되지 않았고 다른 사람들의 코드를 참고했다. 핵심은 for문을 돌면서 id값에 상응하는 nickname을 갱신해줘야 한다는 점이다. 이 점을 모르고 'Change'가 나오면 nickname이 갱신되는 식으로 풀려고 하니까 안 되었다. 아직까지 JavaScript가 돌아가는 기본 원리조차 모르는 바보이다..ㅜㅜ

 

Solutions

Solution 1.
function solution(record) {
  /* Map Ver. */
  const answer = [];
  const map = new Map();
  for (const info of record) {
    const [action, id, nickname] = info.split(' ');
    if (action === 'Leave') {
      answer.push([id, '님이 나갔습니다.']);
      continue;
    }
    if (action === 'Enter') {
      answer.push([id, '님이 들어왔습니다.']);
    }
    map.set(id, nickname);
  }
  return answer.map((el) => map.get(el[0]) + el[1]);
 }
Solution 2.
function solution(record) {
  /* Obj Ver. */
  const answer = [];
  const obj = {};
  for (const info of record) {
    const [action, id, nickname] = info.split(' ');
    if (action === 'Leave') {
      answer.push([id, '님이 나갔습니다.']);
      continue;
    }
    if (action === 'Enter') {
      answer.push([id, '님이 들어왔습니다.']);
    }
    obj[id] = nickname;
  }
  return answer.map((el) => obj[el[0]] + el[1]);
}

Solution 3.
function solution(record) {
  const users = {};
  const info = [];
  const actObj = {
    Enter: '님이 들어왔습니다.',
    Leave: '님이 나갔습니다.',
  };

  for (const rec of record) {
    const [act, id, nick] = rec.split(' ');
    if (nick) users[id] = nick;
    if (act !== 'Change') info.push([act, id]);
  }
  return info.map(([act, id]) => `${users[id]}${actObj[act]}`);
 }

함께 보기

 

Map - JavaScript | MDN

The Map object holds key-value pairs and remembers the original insertion order of the keys. Any value (both objects and primitive values) may be used as either a key or a value.

developer.mozilla.org

 

728x90
반응형

댓글