드디어 이걸 시간 안에 풀었다!
30분 안에 풀었고, 10초 안에 풀리도록 했다
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/92334
function solution(id_list, report, k) {
//각 유저는 한번에 한명의 유저 신고 가능
//계속해서 신고 가능 : 동일한 유저에 대한 신고 횟수 1회
//k번 이상 신고된 유저 - 게시판 이용 정지 - 취합해서 마지막에 게시판 이용 정지
//교집합 배열 : let difference = arr1.filter(x => arr2.includes(x));
1. 중복 삭제 : 한 사람이 같은 사람을 신고한 건 하나로 친다
let set = new Set(report);
report = Array.from(set)
2. 신고한 사람 : 신고 당한 사람 객체 생성
let obj={};
for(let id of id_list){
obj[id] = [];
}
3. 신고 당한 횟수 세는 객체 생성
let count = {};
for(let id of id_list){
count[id] = 0;
}
let candidates = [];
4. 시간 단축의 핵심
: 2,3에 필요한 map을 각각 쓰는 게 아니라 한번만 쓴다
report.map(el => {
//2번 객체 생성
let key= el.split(' ')[0]
let val= el.split(' ')[1]
obj[key].push(val)
//3번 객체 생성 중 k이상이면 candidates에 넣는다(이게 목적)
count[val]++;
if(count[val] >= k)candidates.push(val)
})
//candidates와 2번 객체의 교집합을 구해서 길이로 만든다
let answer=[];
for(let key in obj){
answer.push(obj[key].filter(el => candidates.includes(el)).length)
}
return answer
}