신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.
id_list | report | k | result |
---|---|---|---|
["muzi", "frodo", "apeach", "neo"] | ["muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"] | 2 | [2,1,1,0] |
["con", "ryan"] | ["ryan con", "ryan con", "ryan con", "ryan con"] | 3 | [0,0] |
function solution(id_list, report, k) {
let reportNums = {};
let set = new Set();
let arr = [];
let result = {};
// 신고 횟수 초기화
id_list.forEach(name => result[name] = 0)
// 신고 당한 횟수 초기화
id_list.forEach(name => reportNums[name] = 0)
// 중복 제거
report.forEach(rep => set.add(rep))
// 신고 당한 횟수 저장
for (let s of set) {
reportNums[s.split(" ")[1]] += 1
}
// 정지된 ID
for (let i = 0; i < Object.values(reportNums).length; i++) {
if (Object.values(reportNums)[i] >= k) {
arr.push(Object.keys(reportNums)[i])
}
}
// 처리 결과 메일 받은 횟수
for (let s of set) {
if (arr.includes(s.split(" ")[1])) {
result[s.split(" ")[0]] += 1
}
}
return Object.values(result)
}
function solution(id_list, report, k) {
let reports = [...new Set(report)].map(a => {return a.split(' ')});
let counts = new Map();
for (const bad of reports){
counts.set(bad[1], counts.get(bad[1]) + 1 || 1)
}
let good = new Map();
for(const report of reports){
if(counts.get(report[1]) >= k){
good.set(report[0], good.get(report[0]) + 1 || 1)
}
}
let answer = id_list.map(a => good.get(a) || 0)
return answer;
}
방법은 비슷해보이는데 코드가 훨씬 간단한 것 같다.