불량 이용자를 신고하여 해당 유저가 정지됐을 때, 처리 된 횟수를 출력하는 문제
문제 👉 programers
입력:
id_list = ["muzi", "frodo", "apeach", "neo"];
// 유저 목록
report = ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi","muzi frodo"];
// 각 유저가 신고한 유저 정보
k = 2;
// 정지 기준
출력:
result = [2, 1, 1, 1]
수도코드 작성하기 전 이 문제를 풀기 위해서 3가지의 큰 틀을 생각했다.
이 3가지의 틀을 생각하며 수도코드를 작성했다.
id_list의 요소가 key, 초기값은 0인 mailing(객체) 생성
만약 신고당한 자의 값(신고한 유저가 담긴 배열)의 길이가 k 이상일 경우, mailing의 해당 유저(key)의 값 횟수 1 증가
mailing의 값을 순서대로 answer에 담아 출력
function solution(id_list, report, k) {
let mailing = {};
for(let i = 0; i < id_list.length; i++){
mailing[id_list[i]] = 0;
}
let reportID = {};
for(let i = 0; i < report.length; i++){
let declare = report[i].split(" ")[0];
let declared = report[i].split(" ")[1];
if(declared in reportID ){
if(reportID[declared].indexOf(declare) === -1) reportID[declared].push(declare);
}
else{
reportID[declared] = [declare];
}
}
for(let key in reportID){
let declare = reportID[key];
if(declare.length === k) {
for(let i = 0; i < declare.length; i++){
if(declare[i] in mailing){
mailing[declare[i]]++;
}
}
}
}
let answer = [];
for(let key in mailing){
answer.push(mailing[key]);
}
return answer;
}
// --- 수정 전
...
if(declare.length === k) { // 잘못된 부분!
for(let i = 0; i < declare.length; i++){
if(declare[i] in mailing){
mailing[declare[i]]++;
}
}
}
...
// --- 수정 후
...
if(declare.length >= k) { // 수정한 부분!
for(let i = 0; i < declare.length; i++){
if(declare[i] in mailing){
mailing[declare[i]]++;
}
}
}
...