😊
신고결과받기
March 25, 2022
문제 링크
조건
- 한번에 한 유저를 신고 가능 → A유저가 B,C 유저를 동시에 신고할 수 없음 (신고한 내용은 ‘userA userB’ 형태를 가짐)
- 동일한 유저 신고 횟수는 1회로 처리 → A유저가 B유저를 두번 이상 신고해도 1번 신고한걸로 처리됨
- 신고 횟수 제한 없음
- k번 이상 신고된 유저는 정지 → k가 2이고 A유저가 C유저를 신고했고 B유저도 C유저를 신고하면 C유저는 정지됨
- 신고된 모든 내용을 취합 후 신고한 유저들에게 정지 사실 이메일 보내짐
- 자기 자신을 신고할 수 없음
입력값
- id_list = 모든 유저 아이디 목록 (배열)
- report = 유저가 신고한 내용 목록 (배열)
출력값
- 각 유저가 받은 정지 사실 이메일 갯수 목록 (배열)
- id_list에 담긴 id 순서대로 담아야됨
풀이과정
- key, value 형태로 데이터를 저장하는 HashMap 사용
- key에는 유저 아이디, value에는 해당 유저를 신고한 유저 목록 저장
- report 배열을 traverse 하면서 유저 신고 목록을 HashMap에 저장
- HashMap을 traverse 하면서 어떤 유저가 k번 이상 신고당한 경우 해당 유저를 신고한 유저들의 정지 사실 이메일 갯수를 1만큼 증가
코드
function solution(id_list, report, k) {
const answer = Array(id_list.length).fill(0);
const report_hashmap = {};
id_list.forEach((id) => {
report_hashmap[id] = [];
});
report.forEach((item) => {
// 신고한 내용은 ‘userA userB’ 형태를 가짐
const [reporter_id, reported_id] = item.split(' ');
// 동일한 유저 신고 횟수는 1회로 처리
if (!report_hashmap[reported_id].includes(reporter_id)) {
report_hashmap[reported_id].push(reporter_id);
}
});
for (const key in report_hashmap) {
if (report_hashmap[key].length >= k) {
report_hashmap[key].forEach((reporter_id) => {
// id_list에 담긴 id 순서대로 담아야됨
answer[id_list.indexOf(reporter_id)] += 1;
});
}
}
return answer;
}
😊