https://school.programmers.co.kr/learn/courses/30/lessons/92334
userInfo Map은 유저 id를 키, 각종 정보를 가지고 있는 객체를 value로 한다.
객체의 프로퍼티는 다음과 같다.
report는 유저가 신고한 사람을 저장하는 Set
reported는 해당 유저를 신고한 유저를 저장하는 Set
makeStopUserCount 는 유저가 신고한 유저가 제제당한 카운트신고내역을 저장한 후 reported size가 k 이상이면
해당 유저를 신고한 사람의 makeStopUserCount 를 1 증가시킨다.이 처리가 끝나면 유저를 순회하면서 answer 배열에 makeStopUserCount를 push한다.
function solution(id_list, report, k) {
const answer = [];
// 유저 등록
const userInfos = id_list.reduce((res, name) => {
let user = { report: new Set(), reported: new Set(), makeStopUserCount: 0 }
res.set(name, user);
return res;
}, new Map());
// 신고 기록
[...new Set(report)].forEach((log) => {
let [user, report] = log.split(" ");
userInfos.get(user).report.add(report);
userInfos.get(report).reported.add(user);
});
// 제제 처리 카운트 누적
userInfos.forEach((userInfo) => {
if (userInfo.reported.size >= k) {
userInfo.reported.forEach((user) => {
userInfos.get(user).makeStopUserCount++;
})
}
});
// 답안 만들기
userInfos.forEach((userInfo) => {
answer.push(userInfo.makeStopUserCount);
});
return answer;
}