[Level1] 신고 결과 받기
신고 결과 받기
function solution(id_list, report, k) {
const hash = id_list.reduce((acc, cur) => {
acc[cur] = { cnt: 0, reporter: [] };
return acc;
}, {});
const answer = id_list.reduce((acc, cur) => {
acc[cur] = 0;
return acc;
}, {});
report.forEach(v => {
[reporter, reported] = v.split(' ');
if (!hash[reported].reporter.includes(reporter)) {
hash[reported].cnt = hash[reported].cnt + 1;
hash[reported].reporter = [...hash[reported].reporter, reporter];
}
});
Object.values(hash).map(value => {
if (value.cnt >= k) {
value.reporter.map(v => (answer[v] = answer[v] + 1));
}
});
return Object.values(answer);
}
거의 두달만에 코테를 다시 풀어보는데, 확실히 코테는 자주 안하면 감을 잃는 것 같다.ㅠㅠ😭😭
오늘부터 다시 최소 하루 한문제는 꼭 코테를 풀며, 잃어버린 감을 찾자 ^__^
전형적인 해시 문제였는데, Obejct 메소드로 접근하다보니 코드가 복잡해진 것 같다.
best 풀이를 보면 set을 활용해서 깔끔한 코드가 나왔다.
Best
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;
}