문제
https://school.programmers.co.kr/learn/courses/30/lessons/92334
풀이
function solution(id_list, report, k) {
const answer = [];
const dedupedReport = [...new Set(report)];
const reportedId = {};
const reportedCount = new Map();
// 전체 유저 id로 키값 지정
for (let id of id_list) {
reportedId[id] = [];
}
for (let report of dedupedReport) {
const [reporter, reported] = report.split(' ');
// 각 유저가 어떤 유저를 신고했는지 확인
reportedId[reporter].push(reported);
// 각 유저가 몇 번 신고당했는지 카운트
if (reportedCount.has(reported)) {
reportedCount.set(reported, reportedCount.get(reported) + 1);
} else {
reportedCount.set(reported, 1);
}
}
// reported 배열에 k 이상 누적된 신고자를 찾아 카운트하고 answer 배열에 추가한다
for (let reporter of id_list) {
const reportedIds = reportedId[reporter];
let count = 0;
for (let reported of reportedIds) {
if (reportedCount.get(reported) >= k) {
count++;
}
}
answer.push(count);
}
return answer;
}
- 중복 신고를 제거하기 위해 set으로 만든 뒤 배열화한다.
- id 별로 어떤 유저를 신고했는지 알 수 있는 해시맵을 만든다.
- report 배열의 두 번째 인자만 추출, map을 만들어 각 유저가 몇 번 신고당했는지 기록한다.
- 연결된 해시맵에 k번 이상 신고당한 유저가 존재하면 카운트가 올라간다.
예전에 정리했던 내용
https://friedegg556.tistory.com/119
- 예전에 못풀었던 문제인데 시간이 지나 다시 풀긴 풀었다...! 코드가 좀 길긴 하지만ㅎ
'Algorithm & 자료구조 > 알고리즘 w.JavaScript' 카테고리의 다른 글
[알고리즘 JS] 프린터 (프로그래머스 Lv.2) (0) | 2023.01.31 |
---|---|
[알고리즘 JS] n^2 배열 자르기 (프로그래머스 Lv.2) (0) | 2023.01.31 |
[알고리즘 JS] 햄버거 만들기 (프로그래머스 Lv.1) (3) | 2023.01.16 |
[알고리즘 JS] 성격 유형 검사하기 (프로그래머스 Lv.1) (0) | 2023.01.15 |
[알고리즘 JS] 숫자 짝꿍 (프로그래머스 Lv.1) (1) | 2023.01.02 |