🔗 문제 LINK

♟ 풀이 순서

id_list = 모든 이용자 ID (arr)
report = 신고한 이용자의 ID와 신고당한 이용자의 ID (arr)
k = 신고 횟수

  1. 정답을 적을 길이id_list인 빈배열 생성
  2. 신고당한 유저와 신고횟수를 객체로 나타내기
  • 중복신고 제거 (같은값들 제거) -> Set()
  • report의 오른쪽에 정지 먹은 유저의 ID의 수 새기 -> 신고받은 유저ID 객체로 만들기(blackList)
  1. 정지먹은 유저의 ID를 신고한 사람에게 +1씩
  • report의 오른쪽에 BlackList유저가 있으면

👾 코드

const solution = (id_list, report, k) => {
  // 1. 정답을 적을 길이id_list인 빈배열 생성
  let answer = new Array(id_list.length).fill(0);
  const blackList = {};

  // 2. 신고당한 유저와 신고횟수를 객체로 나타내기
  Array.from(new Set(report)).forEach((id) => {
    blackList[id.split(" ")[1]] = (blackList[id.split(" ")[1]] || 0) + 1;
  });

  // 3. 정지먹은 유저의 ID를 신고한 사람에게 +1씩
  Array.from(new Set(report)).forEach((id) => {
    if (blackList[id.split(" ")[1]] >= k) {
      answer[id_list.indexOf(id.split(" ")[0])]++;
    }
  });

  return answer;
};

👀 코드 비교

  • 다른 코드를 보니 나보다 시간복잡도가 더 적었다. 다른 분의 시간 복잡도는 4n 이였다.
    비교해보니 3번에서 차이가 났다.
    나는 forEach문 안에서 indexOf로 배열에 넣어주었는데 다른분의 코드에서는 “블랙리스트에서 k이상신고받은 사람을 신고한 사람” 에 대한 객체를 한 번 더 만들어주고 그 사람들이 받은 메일을 answer에 받아서 return 해주었다.

☕ 잡담

  • 계속 코드길이만 짧게하려고 했는데 연산속도에 신경을 써야할 것 같다.





Leave a comment