본문 바로가기
Coding Test/JavaScript

[프로그래머스] 신고 결과 받기 JavaScript Code

by giem 2022. 7. 17.
반응형

이번에는 JavaScript로 코드를 짜봤다.

 

Map 함수를 사용하려했는데 map값으로 += 연산이 되지 않아서

(이 부분은 set, get을 같이 사용해서 해결 가능한 것을 다른사람의 풀이를 보고 알 수 있었다.)

 

알고 있는 Object로 사용을 했다.

 

일단 앞의 파이썬 포스트와 같은 방식으로 구현했다.

2022.07.16 - [Coding Test/Python] - [프로그래머스] 신고 결과 받기 Python code

 

 

[프로그래머스] 신고 결과 받기 Python code

문제 설명 예시 Input, Output 설명 code 구현은 아래와 같이 했다. answer의 배열은 id_list의 길이와 같기 때문에 0으로 모두 초기화해준다. 그 후 set으로 report의 중복을 제거한다. for문으로 report를..

gm-note.tistory.com

 

풀이는 똑같다. 문제만 첨부하겠다.

 

 

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를 사용하는 쪽에서 성능 이슈가 있는 것 같다.

 

이 부분은 한번 분석해봐야겠다.

반응형

댓글