https://school.programmers.co.kr/learn/courses/30/lessons/92334
id_list | report | k | result |
---|---|---|---|
["muzi", "frodo", "apeach", "neo"] | ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"] | 2 | [2,1,1,0] |
["con", "ryan"] | ["ryan con", "ryan con", "ryan con", "ryan con"] | 3 | [0,0] |
function solution(id_list, report, k) {
const id_obj = id_list.reduce((acc, id) => {
acc[id] = [];
return acc;
}, {});
const report_obj = report.reduce((acc, curr) => {
const [reporter, reportedIds] = curr.split(' ');
if (!acc[reporter].includes(reportedIds)) {
acc[reporter].push(reportedIds);
}
return acc;
}, id_obj);
const reportedId_list = id_list.reduce((acc, id) => {
acc.push(...report_obj[id]);
return acc;
}, []);
const reportedCount_obj = reportedId_list.reduce((acc, id) => {
if (acc[id] === undefined) {
acc[id] = 0;
}
acc[id] += 1;
return acc;
}, {});
const bannedId_list = id_list.filter(id => reportedCount_obj[id] >= k);
return Object.values(report_obj).map(reportedIds => {
return reportedIds.filter(id => bannedId_list.includes(id)).length;
});
}
report_obj
를 새로 만든다.const report_obj = {
muzi: ['frodo', 'neo'],
apeach: ['frodo', 'muzi'],
frodo: ['neo'],
neo: [],
};
report_obj
객체에서 각 키 값은 각 유저마다 신고한 다른 유저 목록을 가리킨다. 이 목록을 하나로 합치면, 전체 신고 유저 목록이 되고, 각 유저별로 신고된 횟수를 카운팅할 수 있음 => reportedCount_obj
const reportedCount_obj = {
muzi: 1,
apeach: 0,
frodo: 2,
neo: 1,
};
2에서 유저별로 신고된 횟수를 카운팅했으므로, k
번 이상 신고된 유저, 즉 정지해야 하는 유저 목록을 만들어야 한다.
전체 유저 목록 id_list
를 대상으로, 정지시켜야 하는 유저 목록 bannedId_list
를 추출한다.
report_obj
객체의 각 키 값, 즉 각 유저의 신고 유저 목록에 대해 정지 유저에 해당하는 유저를 필터링한 후, 그 개수를 가져온다.