[ 프로그래머스 ] ##92334 : 신고 결과 받기 - JAVA

🔗 신고 결과 받기

import java.util.*;
class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        // 한 번에 한 번 신고, 신고 횟수는 무제한
        // 한 유저에 여러 번 신고 해도 신고 횟수는 1회로 처리
        // k번 이상 신고된 유저는 이용 정지 -> 신고한 유젛에게 정지 사실을 알림

        // id_ list : 이용자의 ID
        // report : 각 이용자가 신고한 이용자의 ID정보 ("신고자 신고당한이용자")
        // k : 정지 기준

        List<Integer> result=new ArrayList<>();

        // 신고자 id , 신고한 사람 list
        Map<String,List<String>> reporter= new HashMap<>();

        // 신고당한 사람 id , 신고당한 횟수
        Map<String, Integer> reported= new HashMap<>();

        for(int i=0;i<report.length;i++){

            String[] r=report[i].split(" ");

            // 신고자 map의 value 값 초기화
            if(!reporter.containsKey(r[0])){
                reporter.put(r[0],new ArrayList<>());
            }
            // 아직 신고 안 했다면 
            if(!reporter.get(r[0]).contains(r[1])){
                // 신고하고
                reporter.get(r[0]).add(r[1]);
                // 횟수 업데이트
                reported.put(r[1],reported.getOrDefault(r[1],0)+1);
            }

        }

        for(String id : id_list){
            int cnt=0;

            if(!reporter.containsKey(id)){
                result.add(0);
                continue;
            }

            // 해당 사용자가 신고한 신고자 list
            List<String> reportedUsers=reporter.get(id);

            for(String reportedUser:reportedUsers){

                // k 번 이상 신고 당했다면 
                if(reported.get(reportedUser)>=k){
                    cnt++;
                }
            }
            result.add(cnt);
        }

        return result.stream().mapToInt(Integer:: intValue).toArray();
    }
}