ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 - 신고 결과 받기
    Algorithm 2023. 5. 12. 14:53

     

    문제

     

    풀이

    먼저 한 유저가 같은 유저를 여러번 신고를 해도 1회 신고로 처리하기 위해 report 배열에서 중복제거를 해준다.

    이 후 id_list와 매칭할 수 있는 유저당 신고 당한횟수 배열과 유저당 받은 메일 횟수 배열을 만들어 유저당 신고 당한횟수 배열에 유저당 신고당한 횟수를 채운다.

    이 후 신고당한 횟수가 정지 조건인 k보다 많은 인덱스에 해당하는 유저당 받은 메일 횟수 배열 인덱스를 증가시킨다.

    코드를 보면서 예시 1번을 진행해보자.

    function solution(id_list, report, k) {
        // report 배열에서 중복 제거
        let setReportArray = [...new Set(report)];
        // 각 유저당 신고당한 횟수 이 배열은 id_list 유저 순서와 동일 ex) [0, 0, 0, 0]
        let reportedUser = Array(id_list.length).fill(0);
        // 각 유저당 받은 메일 횟수 이 배열은 id_list 유저 순서와 동일 ex) [0, 0, 0, 0]
        let receivedMail = Array(id_list.length).fill(0);
        
        // ' ' 기준으로 문자열 자르기 
        // ex) ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"]
        //  => [[muzi, frodo], [apeach, frodo], [frodo, neo], [muzi, neo], [apeach, muzi]]
        setReportArray = setReportArray.map(reportedData => reportedData.split(' '));
        setReportArray.map(reportedDataArray => {
            // 신고당한 유저의 이름으로 id_list의 인덱스를 찾아 reportedUser의 해당 인덱스값 증가
        	// 각 유저당 받은 신고 횟수 ex) ["muni", "frodo", "apeach", "neo"] [1, 2, 0, 2]
            reportedUser[id_list.indexOf(reportedDataArray[1])]++;
        });
        
        // 각 유저당 받은 메일 횟수
        reportedUser.map((reportedNum, idx) => {
            // 신고가 k번 이상이어야 메일을 받는다
            if(reportedNum >= k) {
                setReportArray.map(reportedDataArray => {
                    // 한 유저가 신고한 유저가 신고당한 횟수가 k번을 넘어 정지가 됐다면
                    if(reportedDataArray[1] === id_list[idx])
                        // 신고한 유저이름과 매칭되는 receivedMail의 해당 인덱스값 증가
                        // ex) ["muni", "frodo", "apeach", "neo"] [2, 1, 1, 0]
                        receivedMail[id_list.indexOf(reportedDataArray[0])]++;
                })
            }
        });
        
        return receivedMail;
    }
Designed by Tistory.