이용자의 ID가 담긴 문자열 배열 id_list, 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열 report, 정지 기준이 되는 신고 횟수 k가 매개변수로 주어질 때, 각 유저별로 처리 결과 메일을 받은 횟수를 배열에 담아 return 하도록 solution 함수를 완성해주세요.
function solution(id_list, report, k) {
// 배열 요소 내 중복 값을 확인하고 splice로 배열 수정
for (let i = 0; i < report.length; i++) {
for (let u = i + 1; u < report.length; u++) {
if (report[i] === report[u]) {
report.splice(u, 1);
}
}
}
// 신고당한사람과 신고한 사람 배열로 따로 나누기
let reports = [];
let reported = [];
for (let i = 0; i < report.length; i++) {
reports.push(report[i].split(' ')[0]);
reported.push(report[i].split(' ')[1]);
}
// 신고 횟수가 k에 도달하면 중복신고. 배열에 추가
let duplicateReport = [];
let count = 0;
for (let i = 0; i < reported.length; i++) {
for (let u = i; u < reported.length; u++) {
if (reported[i] === reported[u]) {
count += 1;
}
}
if (count < k) {
count = 0;
} else if (count >= k || duplicateReport.indexOf(reported[i]) === -1) {
duplicateReport.push(reported[i]);
count = 0;
}
}
// 중복신고 아이디로 reported 배열에서 인덱스를 추출
// report의 index에 대입하여 결과값 추출
let result = Array(id_list.length).fill(0);
for (let i = 0; i < duplicateReport.length; i++) {
for (let u = 0; u < reported.length; u++) {
if (duplicateReport[i] === reported[u]) {
let resultIndex = id_list.indexOf(reports[u]);
result[resultIndex] += 1;
}
}
}
return result;
}
function solution(id_list, report, k) {
//각 id를 신고한 사람 array를 reportedBy에 저장,
//k번 이상 신고당한 id를 신고한 id가 받을 메일 수를 mailCount에 저장
//answer에 mailCount에 저장된 값을 id_list와 같은 id 순서로 저장.
const reportSet = new Set(report);
const reportedCount = {}; //{"id": Number(count)} // 각 id 신고당한 횟수
const reportedBy = {}; //{"id":[]} // id를 신고한 사람 배열로 저장
const mailCount = {}; //{"id":Number(count)} // result값
id_list.forEach((element) => {
reportedCount[element] = 0; // 값 초기화 {muzi: 0, frodo: 0, apeach: 0, neo: 0}
mailCount[element] = 0;
reportedBy[element] = [];
});
reportSet.forEach((element) => {
const [id, reported] = element.split(" ");
// 만약 element = ["muzi frodo"] id=muzi, reported=frodo
reportedCount[reported] += 1; //reportedCount.frodo += 1
reportedBy[reported].push(id);
});
// 신고당한사람, 신고한사람, 신고한 사람의 배열 값을 이용해
// 마지막 mailCount 추가
for (const reportedId in reportedCount) {
if (reportedCount[reportedId] >= k) {
reportedBy[reportedId].forEach((reporter) => {
mailCount[reporter] += 1;
});
}
}
// map을 이용해 각 요소를 mailCount.id값으로 변형
return id_list.map((id) => mailCount[id]);
}
function solution(id_list, report, k) {
reportSet = new Set(report);
let reported = {};
let reportedBy = {};
let count = {};
id_list.forEach((e) => {
reported[e] = 0;
reportedBy[e] = [];
count[e] = 0;
});
reportSet.forEach((e) => {
const [id, reports] = e.split(' ');
reported[reports] += 1;
reportedBy[reports].push(id);
});
for(let props in count){
if(reported[props]>=k){
reportedBy[props].forEach(e=>{
count[e]+=1
})
}
}
return id_list.map(e=> count[e])
}