코딩테스트

신고 결과 받기 - 2022 카카오 블라인드 채용

developerYoung 2022. 7. 6. 01:15
반응형

 

 

이 문제의 input은 위와 같다.

문제 읽으며 생각한 풀이 방향성!!!!

 

1. 유저가 신고한 유저의 리스트를 갖는 Map 구현

2. 유저당 신고당한 count를 갖는 Map구현

 

이 두가지를 통해서 구현할 계획이다!

 

먼저 reportMap과 cntMap 두개를 만들었다.

    let reportMap = {};
    let cntMap = {};
    report.forEach((re)=>{
        const [from, to] = re.split(' ');
        if(reportMap[from]){
            if(!reportMap[from].includes(to)){
                reportMap[from].push(to)
                cntMap[to] ? cntMap[to]+=1 :cntMap[to] =1    
            }
        }else {
            reportMap[from] = [to];
            cntMap[to] ? cntMap[to]+=1 :cntMap[to] =1
        }
    })
 

 

split함수를 통해 띄어쓰기 기준으로 잘라

이미 내가 신고했던 사람이 존재한다면 배열에도 넣지 않고, cnt를 늘리지도 않는다.

이렇게 Map을 만들면 다음과 같이 출력된다.

 

깔끔하게 id마다 누굴 신고했고 몇 번 신고를 당했는지 알 수 있다.

 

그리고 id_list로 report를 조회하여, 그 배열에 있는 id값의 cnt가 k보다 크거나 같다면 메일 수를 늘려주게 되면 된다.

    return id_list.map((id)=>{
        if(!reportMap[id]){
            return 0
        }else {
            return reportMap[id].reduce((acc,curr)=>{
                if(cntMap[curr] >= k) acc+=1;
                return acc;
            },0)
        }
    })
 

 

위의 사진처럼 테스트 케이스를 정상적으로 통과한 것을 볼 수 있다!

 

 

하지만 다른 사람의 풀이 결과의 속도와 비교했을 때, 내 결과가 더 느림을 확인할 수 있었다...

그렇지만 메모리에서는 더 적게 차지하는 것을 볼 수 있다.

어느 점에서 속도를 높일 수 있을 지 생각해보고 개선할 점을 생각해서 좋은 방법을 찾아봐야겠다.

 

반응형