문제풀이 #1

programmers.co.kr/learn/courses/30/lessons/..

function solution(id_list, report, k) {
    var answer = new Array(id_list.length).fill(0);

    // 피신고 : 신고자배열
    const reportTable = report.reduce((acc, val) => {
        const [reporter, reported] = val.split(' ');
        acc[reported] ? acc[reported].push(reporter) : acc[reported] = [reporter]
        return acc;
    }, {})

    Object.entries(reportTable).forEach( value => {
        let [, reporters] = value;

        // 신고자 중복제거
        reporters = reporters.filter((r, i) => reporters.indexOf(r) === i)

        // 횟수 카운트
        if(reporters.length >= k) {
            reporters.forEach(r => {
                answer[id_list.indexOf(r)]++;
            })
        }
    })
    return answer;
}

다른 풀이를 보니 Set을 이용해서 report 배열의 중복을 제거하고 시작하는 풀이가 있다. 중복을 먼저 제거하고 시작하는 것이 더 효율적인 것 같다.