[Level1] 신고 결과 받기




신고 결과 받기

programmers


function solution(id_list, report, k) {
  const hash = id_list.reduce((acc, cur) => {
    acc[cur] = { cnt: 0, reporter: [] };
    return acc;
  }, {});
  const answer = id_list.reduce((acc, cur) => {
    acc[cur] = 0;
    return acc;
  }, {});
  report.forEach(v => {
    [reporter, reported] = v.split(' ');
    if (!hash[reported].reporter.includes(reporter)) {
      hash[reported].cnt = hash[reported].cnt + 1;
      hash[reported].reporter = [...hash[reported].reporter, reporter];
    }
  });
  Object.values(hash).map(value => {
    if (value.cnt >= k) {
      value.reporter.map(v => (answer[v] = answer[v] + 1));
    }
  });

  return Object.values(answer);
}

거의 두달만에 코테를 다시 풀어보는데, 확실히 코테는 자주 안하면 감을 잃는 것 같다.ㅠㅠ😭😭
오늘부터 다시 최소 하루 한문제는 꼭 코테를 풀며, 잃어버린 감을 찾자 ^__^
전형적인 해시 문제였는데, Obejct 메소드로 접근하다보니 코드가 복잡해진 것 같다.
best 풀이를 보면 set을 활용해서 깔끔한 코드가 나왔다.

Best

function solution(id_list, report, k) {
    let reports = [...new Set(report)].map(a=>{return a.split(' ')});
    let counts = new Map();
    for (const bad of reports){
        counts.set(bad[1],counts.get(bad[1])+1||1)
    }
    let good = new Map();
    for(const report of reports){
        if(counts.get(report[1])>=k){
            good.set(report[0],good.get(report[0])+1||1)
        }
    }
    let answer = id_list.map(a=>good.get(a)||0)
    return answer;
}