[프로그래머스 | Javascript] 2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기

박기영·2022년 9월 18일
0

프로그래머스

목록 보기
55/159
post-custom-banner

solution

function solution(id_list, report, k) {
    // 이메일 받는 횟수를 측정하기 위한 배열
    let ans = new Array(id_list.length).fill(0);
    
    // 신고 당한 유저(key), 신고한 유저(value)의 객체
    let report_list = {};
    
    
    id_list.map((user) => {
        //key로 userid를, value로 빈 배열을 가지는 객체
        report_list[user] = [];
    })
    
    report.map((user) => {
        let [user_id, report_id] = user.split(" ");
        
        // 신고 당한 사람을 신고한 사람이 이미 한번 신고를 했었다면 그냥 넘기고
        // 처음 신고하는 것이라면 신고 당한 사람(key)의 빈 배열(value)에 신고한 유저를 push한다.
        if(!report_list[report_id].includes(user_id)){
            report_list[report_id].push(user_id);
        }        
    })
    
    for(let key in report_list){
        // 신고 당한 횟수가 k 이상이라면(key 유저를 신고한 사람이 k 이상이라면)
        if(report_list[key].length >= k){
            // key 유저를 신고한 사람들의 값을 증가시킨다(이메일을 받는 횟수를 증가시킨다)
            report_list[key].map((user)=>{
                ans[id_list.indexOf(user)] += 1
            })
        }
    }
    
    return ans;
}

코드 실행 테스트 케이스는 통과를 했는데, 제출 시 테스트 케이스들에서 오답 처리되는 것을 해결하지 못해서 결국 다른 분 풀이를 참고했다.
분명히 로직이 같은데 왜 나는 오답이 됐는지 모르겠다 ㅠㅠ
객체의 key-value 구조를 활용하셨다. 이게 아무래도 시간 초과 문제를 많이 해결해줬을 것으로 보인다.

필자는 new Set 객체를 통해서 중복 신고를 제거하고 진행했었는데,
그 부분은 문제가 없었고,
아무래도 이메일 받는 횟수를 처리하는 과정에서 실수가 있었던 모양이다.

참고 자료

참고 자료

profile
나를 믿는 사람들을, 실망시키지 않도록
post-custom-banner

0개의 댓글