문제 신고 결과 받기
불량 이용자를 신고하여 피신고자가 k번 신고를 받으면 신고자에게 처리 결과 이메일이 발송됩니다. (단 동일인에게 신고를 받는 경우는 한 번으로 처리됩니다.)
유저 리스트 id_list
와 신고 내역 repost
, 그리고 몇 번의 신고를 받아야 이메일이 발송되는 기준인 k
가 주어질 때,
유저마다 신고 결과에 대한 이메일을 받는 횟수를 반환하게 해주세요.
let answer = new Array(id_list.length);
answer.fill(0)
유저가 이메일을 받게되는 횟수를 담을 배열입니다. 카운트를 하기위해 0으로 채워줍니다.
let reportSet = [...new Set(report)];
중복된 신고내역을 없애기 위해 repost를 set으로 처리하여 reposrSet 배열에 담아줍니다.
let reportArr = [];
repostSet 배열의 요소를 [신고자, 피신고자] 모양으로 바꿔 담아줄 reportArr배열입니다.
for(let x of reportSet){
reportArr.push(x.split(' '));
}
k번 이상의 신고를 받은 유저를 가려내기 위해 신고받은 횟수를 세어주겠습니다.
let sH = new Map;
let reportUser = [];
let blackUser = [];
for(let x of reportArr){
reportUser.push(x[1])
}
for(let x of reportUser){
sH.set(x, (sH.get(x) || 0)+1)
}
for(let [key, val] of sH){
if(val >= k){
blackUser.push(key)
}
}
reportUser 는 피신고자입니다. 빈도수를 세어 k이상인 유저가 이메일 발송대상인 blackUser 배열로 들어가게 됩니다.
for(let x of reportArr){
if(blackUser.includes(x[1])){
let num = id_list.indexOf(x[0]);
answer[num]++;
}
}
function solution(id_list, report, k) {
let answer = new Array(id_list.length);
answer.fill(0)
let reportSet = [...new Set(report)];
let reportArr = [];
let sH = new Map;
let reportUser = [];
let blackUser = [];
for(let x of reportSet){
reportArr.push(x.split(' '));
}
for(let x of reportArr){
reportUser.push(x[1])
}
for(let x of reportUser){
sH.set(x, (sH.get(x) || 0)+1)
}
for(let [key, val] of sH){
if(val >= k){
blackUser.push(key)
}
}
for(let x of reportArr){
if(blackUser.includes(x[1])){
let num = id_list.indexOf(x[0]);
answer[num]++;
}
}
return answer;
}