반응형
이번에는 JavaScript로 코드를 짜봤다.
Map 함수를 사용하려했는데 map값으로 += 연산이 되지 않아서
(이 부분은 set, get을 같이 사용해서 해결 가능한 것을 다른사람의 풀이를 보고 알 수 있었다.)
알고 있는 Object로 사용을 했다.
일단 앞의 파이썬 포스트와 같은 방식으로 구현했다.
2022.07.16 - [Coding Test/Python] - [프로그래머스] 신고 결과 받기 Python code
풀이는 똑같다. 문제만 첨부하겠다.
function solution(id_list, report, k) {
let answer = new Array(id_list.length);
answer.fill(0);
let reports = new Set(report);
let repmap = id_list.reduce((map, name)=>{
map[name]=0;
return map;
}, {});
for(let r of reports) {
repmap[r.split(' ')[1]] += 1;
}
for(let r of reports) {
if(repmap[r.split(' ')[1]]>=k) {
answer[id_list.indexOf(r.split(' ')[0])]+=1;
}
}
return answer;
}
위 코드는 파이썬보다 성능이 낮게 나왔는데 다른사람의 풀이중 best를 보았다.
다음과 같은 코드가 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;
}
성능이 C++과 비슷하게 나왔다.
JS를 제대로 해보지는 않아서 이렇게 많이 차이나는 이유를 모르겠다.
방식은 비슷한것을 보니 fill이나 reduce나 obj를 사용하는 쪽에서 성능 이슈가 있는 것 같다.
이 부분은 한번 분석해봐야겠다.
반응형
'Coding Test > JavaScript' 카테고리의 다른 글
[프로그래머스] 예산 JavaScript Code (0) | 2022.08.10 |
---|---|
[프로그래머스] 없는 숫자 더하기 JavaScript Code (2) | 2022.08.08 |
[프로그래머스] 소수 만들기 JavaScript Code (4) | 2022.08.04 |
[프로그래머스] 내적 JavaScript Code (0) | 2022.07.29 |
[프로그래머스] 폰켓몬 Javascript Code (0) | 2022.07.29 |
댓글