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

[Programmers] level 1: 신고 결과 받기 by JavaScript

by codingBear 2022. 6. 28.
728x90
반응형

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

https://tech.kakao.com/2022/01/14/2022-kakao-recruitment-round-1/

 

2022 카카오 신입 공채 1차 온라인 코딩테스트 for Tech developers 문제해설

지난 2021년 9월 11일 토요일 오후 2시부터 7시까지 5시간 동안 2022 KAKAO BLIND RECRUITMENT 1차 코딩 테스트가 진행되었습니다. 테스트에는 총 7개의 문제가 출제되었으며, 개발 언어는 C++, Java, JavaScript, K

tech.kakao.com

https://velog.io/@dnjsdud2257/%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%8B%A0%EA%B3%A0-%EA%B2%B0%EA%B3%BC-%EB%B0%9B%EA%B8%B0-JavaScript

 

코딩테스트 - 신고 결과 받기 JavaScript

신고 결과 받기 프로그래머스 Lv1 JS 문제 풀이

velog.io

https://onlydev.tistory.com/137

 

[프로그래머스] 신고 결과 받기 | JavaScript

문제 풀이 이게 정말 레벨1 문제인가..? 카카오 기술 블로그에서는 해시 자료구조를 활용할 수 있는지에 대한 문제라고 설명한다. (게다가 정답률이 80.13%다. 😲) 1. userList 만들기 const userList = id_l

onlydev.tistory.com


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

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

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr


 코딩 테스트를 준비하며 처음으로 맞딱드린 문제였다. 머리를 싸매고 이리저리 해결방안을 궁리하였으나 결국 GG 선언하고 구글링을 통해 다른 사람들이 작성한 해답을 찾아보았다. 다른 사람들이 작성해놓은 코드를 보면 쉬워 보이는데 내 손으로 짜려고 하면 너무나도 어렵다. 더더욱 공부에 매진할 수밖에.

 이번 문제풀이의 핵심은 특정 유저를 몇 명이 신고했는지, 그리고 신고 횟수를 통해 누가 정지 메일을 발송 받을지 구현해내는 것이다.

 

Solutions

Solution 1.
function solution(id_list, report, k) {
  const reportLogs = [...new Set(report)];
  const userReportedInfo = {};
  const answer = new Array(id_list.length).fill(0);

  for (const i of id_list) {
    if (!userReportedInfo[i]) {
      userReportedInfo[i] = [];
    }
  }

  reportLogs.forEach((el) => {
    const [user, reportedUser] = el.split(' ');

    if (!userReportedInfo[reportedUser].includes(user)) {
      userReportedInfo[reportedUser].push(user);
    }
  });

  for (const key in userReportedInfo) {
    if (userReportedInfo[key].length >= k) {
      userReportedInfo[key].forEach((user) => {
        answer[id_list.indexOf(user)]++;
      });
    }
  }

  return answer;
}​
Solution 2.
function solution(id_list, report, k) {
  const userList = id_list.reduce((result, currentId) => {
    result[currentId] = [0, []];
    return result;
  }, {});

  for (const id of new Set(report)) {
    const [user, reportedUser] = id.split(' ');

    userList[user][1].push(reportedUser);
    userList[reportedUser][0]++;
  }

  const bannedUsers = id_list.filter((id) => userList[id][0] >= k);
  const emailCnts = id_list.map((id) => {
    return userList[id][1].filter((id) => {
      return bannedUsers.includes(id);
    }).length;
  });

  return emailCnts;
}
728x90
반응형

댓글