본문 바로가기
자바스크립트 코딩테스트

프로그래머스 Level 1 - 신고 결과 받기 (Javascript)

by 준벨롭 2023. 11. 19.

문제

답안

function solution(id_list, report, k) {
    let answer = [];
    
    // id_list와 길이가 같은 배열 생성(기본값은 0)
    answer = new Array(id_list.length).fill(0);
    
    // 신고한 사람, 신고 당한 사람의 값이 들어갈 객체 생성
    let reporting = {};
    let reported = {};
    
    // 중복 제거(다시 공부할것)
    for(let i=0; i<id_list.length; i++){
        reporting[id_list[i]] = new Set();
        reported[id_list[i]] = 0;
    }
    
    // report에서 띄어쓰기를 기준으로 나눠준다 i가 0일때, temp = [[muzi], [frodo]]
    for(let i = 0; i < report.length; i++){
        let temp = report[i].split(" ");
        
            // 신고한 사람값에 신고당한 사람의 값이 없다면 reporting객체에 추가, 
            if(!reporting[temp[0]].has(temp[1])){
                reporting[temp[0]].add(temp[1]);
                
                //그리고 reported에 있는 해당값에 +1(신고당한 횟수)
                reported[temp[1]]++;
            }
    }
    
    // reporting에 포함된 id_list i번째 값을 n으로 변수 선언
    // 예를들어, i가 0이면 n = frodo, neo가 출력된다.
    for(let i = 0; i < id_list.length; i++){
        let n = reporting[id_list[i]];
        
        // n 내부에 있는 값들을 j로 출력한다.
        for(let j of n){
        
            // 신고된 횟수가 담겨있는 reported에 해당값이 k보다 클 경우 answer의 i번째 값에 1을 증가시킨다.
            if(reported[j] >= k)
                {
                    answer[i]++;
                }
        }
    }
    
    
    
    return answer;
}

후기

객체에 대해서 공부하는 중이라, 아직 정확하게 다시 풀 수는 없을 것 같다.

그리고, 중복을 제거하는 방법인 new Set(), [...set]을 이용해서 풀 수 없었기에, 

객체를 초기화 하는 방법에 대해서도 공부가 필요해보인다.

 

어떻게 풀어야 할지는 감이 오지만,,,, 적절한 메서드와 함수를 짜기엔 아직 실력이 부족하다 ㅠㅠ

728x90