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

프린이·2022년 6월 21일
1



  • 제 코드는 최선의 방안은 아닙니다.
  • 단순히 기록용, 공유용이니 참고바랍니다.

🔗 문제 링크

https://programmers.co.kr/learn/courses/30/lessons/92334

✔ 내가 생각한 방법

  1. 신고한 사람의 Map을 만든다.
  2. 한 사람이 한 사람을 중복 신고 가능하지만 1번으로 카운팅하기 때문에
    같은 값들을 없애기 위해 report 배열을 Set사용해서 중복되는 신고 없앰
  3. 신고 배열인 report를 for문을 돌려 어떤 사람이 어떤 사람을 신고했는지 setMap변수로 Map을 이용해 정리
  4. 신고 누적된 사람을 체크하기 위해 badMap변수로 Map을 이용해 만들어 신고 받은 사람의 신고 누적 수 관리
  5. Map세팅이 완료되면 id_list배열을 for문을 돌려 해당 아이디가 신고한 적이 있는지 확인
    -> 5-1) 신고 경험 없음
    : answer배열에 0 push한다
    -> 5-2) 신고 경험 있음
    : set.get()을 이용해 나온 신고 배열만큼 포문을 돌림
    : 해당 신고 당한 사람이 K번 이상 신고 받았는지 확인
    --> 5-2-1) K번 미만 : 카운팅 안함
    --> 5-2-1) K번 이상 : 카운팅 함
    : 카운트 된 값을 answer에 push
  6. answer return

📝 답안 코드

function solution(id_list, report, k) {
    var answer = [];
    var setMap = new Map();
    var badMap = new Map();
    var person, bPerson = '';
    
    report = [...new Set(report)];
    
    for(var i = 0; i < report.length; i++){
        person = report[i].split(" ")[0];
        bPerson = report[i].split(" ")[1];

        if(setMap.get(person) == undefined){
            setMap.set(person, [bPerson]);
        }
        else{
            if(setMap.get(person).indexOf(bPerson) == -1){   
                setMap.get(person).push(bPerson);
            }
        }
        
        if(badMap.get(bPerson) == undefined){
            badMap.set(bPerson, 1);
        }
        else{
            var cnt = badMap.get(bPerson);
            cnt++;
            badMap.set(bPerson, cnt);
        }
    }
    
    for(var i = 0; i < id_list.length; i++){
        if(setMap.get(id_list[i]) == undefined){
            answer.push(0);
        }
        else{
            var cnt = 0;
            var tmpArr = setMap.get(id_list[i]);
            for(var j = 0; j < tmpArr.length; j++){
                if(badMap.get(tmpArr[j]) >= k)
                    cnt++;
            }
            answer.push(cnt);
        }
    }

    
    return answer;
}
profile
주니어 프론트엔드개발자

0개의 댓글