[코테] Lv1-1 신고 결과 받기

404·2022년 5월 31일
0

코테&알고리즘

목록 보기
2/4
post-thumbnail

2022 카카오 블라인드채용 코테문제

유저간 신고 건수를 파악하여 정지된 유저가 있으면 신고자에게 메일을 보내주고, 신고자가 받게되는 메일의 수를 구하는 문제다.

이 문제에서 고려해야할 주요 포인트는 아래와 같다

  • 한 유저를 2회 이상 중복으로 신고할 수 없다 ( a가 b를 2번 신고시 1번으로 취급)
  • input 1) 사용자명 string 배열 ["순신", "균", "프로도", "네오"]
  • input 2) 신고자와 피신고자로 이루어진 string의 배열 [ "순신 균", "프로도 네오"]
  • input 3) 정지 기준이 되는 피신고 횟수 k

나의 답안

https://github.com/FUNco247/Co_Test_Solution/blob/master/reportResult.js

  1. 우선 중복신고를 제외하기 위해서 Set() 메소드를 사용했다. 원래 모르고있었던 메소드였는데 중복 제거를 위해 적당한 것을 구글링했다. 여기서 주의해야 할 점은 Set()은 객체를 리턴한다는 점, new와 함께 사용한다는 점이다.
    그래서 report = [...new Set(report)]; 와 같이 중복을 제거한 뒤 다시 배열로 만들어줬다.
    배열로 다시 만들어준 이유는 반복문을 사용해 신고자와 피신고자를 나누고 신고당한 횟수를 파악하기 위해서다.

  2. 신고자와 피신고자를 구분하기 위해 각각 빈 배열을 생성했다.

  let reportPair = [];
  let reportedUser = [];
  let bannedUser = [];
  for (var i = 0; i < report.length; i++) {
    const pairArr = report[i].split(" ");
    reportPair[i] = pairArr; //배열의 요소로 배열을 갖게됨
    reportedUser[i] = report[i].split(" ")[1];
  }

reportPair 배열은 스트링으로 되어있는 신고자 / 피신고자를 split(" ")해서 배열 형태로 바꿔주기 위해 만들었고, 신고당한 횟수를 파악하기 위해 reportedUser배열을, 결과적으로 정지당한 유저를 파악하기 위해 bannedUser를 만들었다.

  1. 빈 객체 mailCount를 만들고 id_list에 있는 유저에 대해 반복문으로 초기값을 0으로 세팅했다. 이 결과 mailCount = { 순신 : 0, 균 : 0 ...}과 같이 세팅될 것이다. 그 뒤 정지될 유저를 구하기 위해 reportedUser안에서 유저별 요소의 갯수를 구하고 k개 이상이면 bannedUser에 포함시켰다.
  let mailCount = {};
  for (var i = 0; i < id_list.length; i++) {
    mailCount[`${id_list[i]}`] = 0;
    const count = reportedUser.filter(
      (element) => element === id_list[i]
    ).length;
    if (count >= k) {
      bannedUser.push(id_list[i]);
    }
  }
  1. 마지막으로 reportPair 요소에서 bannedUser의 요소를 1번 인덱스로 가지고있으면 mailCount의 숫자를 1씩 늘리는 방법으로 신고메일을 받을 횟수를 결정하였다(arr.includes() 메소드 사용). 그 후 유저별 받을 메일의 수를 arrat로 return 하기 위해 Object.values() 메소드를 사용했다.
 for (let i = 0; i < reportPair.length; i++) {
    if (bannedUser.includes(reportPair[i][1])) {
      mailCount[`${reportPair[i][0]}`] += 1;
    }
  }
  answer = Object.values(mailCount);
  return answer;

느낀점

  1. 조금 더 코드를 간결하게 하기 위해서 3번과 4번 과정을 통일할 수도 있을것 같다는 생각을 했다. 2일 전에 작성한 코드임에도 불구하고 풀이 리뷰를 작성하고 있는 지금 봐도 보기 불편한 코드다. 좀 더 이해하기 좋게 코드를 작성하는 연습을 해야겠다.

  2. 빈 배열, 빈 객체를 생성하는 과정이 많은데 이런 과정이 과연 효율적인 것인지 다른 방법을 찾아보는게 좋을지 공부해봐야겠다.

profile
T.T

0개의 댓글