
2022 KAKAO BLIND RECRUITMENT
LEVEL 1
게시판 불량 이용자를 신고하고 신고 처리 결과를 메일로 발송하는 시스템을 만들고자 한다.
k번 이상 신고된 유저는 게시판 이용 정지되고, 정지된 유저를 신고한 유저들에게는 해당 사실을 메일로 발송한다. 이 때, 각 유저별로 신고 처리 결과 메일을 받은 횟수를 배열에 담아 return하는 solution 함수를 작성하시오.
id_list
id_list의 길이 ≤ 1,000id_list의 원소 길이 ≤ 10report
각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열
1 ≤ report의 길이 ≤ 200,000
3 ≤ report의 원소 길이 ≤ 21
report의 원소는 "이용자id 신고한id"의 형태의 문자열
k
정지 기준이 되는 신고 횟수
1 ≤ k ≤ 200, k는 자연수
id_list에 담긴 id 순서대로 각 유저가 받은 결과 메일 횟수를 담은 배열report 배열을 순회하면서 reportedResult, reporterResult 객체를 채운다.reportedResult는 이용자의 ID를 키로 가지고, 해당 유저를 신고한 이용자들의 ID를 담은 Set을 값으로 가진다. (같은 이용자에게 여러번 신고 당할 수도 있으므로 중복을 피하기 위해 배열이 아닌 Set을 사용)reporterResult는 이용자의 ID를 키로 가지고, 해당 유저가 신고한 이용자들의 ID를 담은 Set을 값으로 가진다. (마찬가지로 같은 유저를 여러번 신고할 수도 있으므로 중복을 피하기 위해 배열이 아닌 Set을 사용)id_list 배열을 순회하면서 reportedResult 객체를 참고하여 신고당한 횟수가 k 이상인 이용자들의 ID를 suspended 배열에 추가한다.reportedResult에서 해당 이용자의 ID를 키로 가지는 Set의 size와 같다.id_list 배열의 ID들을 순서대로 순회하면서 각 이용자가 suspended에 있는 이용자들 중 몇명이나 신고했는지를 구해 answer 배열에 추가한다.answer 배열을 return 한다.function solution(id_list, report, k) {
// 1. report 배열을 순회하면서 reportedResult, reporterResult 객체를 채운다
const reportedResult = {};
const reporterResult = {};
for (let i = 0, n = id_list.length; i < n; i++) {
const userID = id_list[i];
reportedResult[userID] = new Set();
reporterResult[userID] = new Set();
}
for (let i = 0, n = report.length; i < n; i++) {
const [reporter, reported] = report[i].split(' ');
reportedResult[reported].add(reporter);
reporterResult[reporter].add(reported);
}
// 2. id_list 배열을 순회하면서 reportedResult 객체를 참고하여
// 신고당한 횟수가 k 이상인 이용자들의 ID를 suspended 배열에 추가한다
const suspended = [];
for (let i = 0, n = id_list.length; i < n; i++) {
const userID = id_list[i];
if (reportedResult[userID].size >= k) {
suspended.push(userID);
}
}
// 3. id_list 배열의 ID들을 순서대로 순회하면서 각 이용자가 suspended에 있는 이용자들 중
// 몇명이나 신고했는지를 구해 answer 배열에 추가한다
const answer = [];
for (let i = 0, n = id_list.length; i < n; i++) {
const userID = id_list[i];
const reportedUsers = reporterResult[userID];
let count = 0;
for (let j = 0, m = suspended.length; j < m; j++) {
if (reportedUsers.has(suspended[j])) {
count++;
}
}
answer.push(count);
}
// 4. answer 배열을 return 한다
return answer;
}