알고리즘

프로그래머스 신고 결과 받기(JAVA)

박카스마시며코딩 2022. 2. 20. 18:17

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

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

 

저는 Map(map)을 이용해 사용자와 인덱스를 매핑시켰습니다.

Set(isCheckReportor)를 이용해 각각의 인덱스에 대해 신고했는지를 판단하였고, List(reports)를 통해 누가 이사람을 신고하였는지를 저장하였습니다.

마지막으로 List(reports)를 통해 각각의 사람이 몇개의 결과 메일을 받았는지를 확인하였습니다.

package Programmers.KAKAO_2022;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class 신고_결과_받기 {
    private static void init(Map<String,Integer>map , String[] id_list){
        for(int i = 0 ; i < id_list.length ; i++){
            map.put(id_list[i],i);
        }
    }
    private static int[] cal(Set<Integer>[] isCheckReportor,
        Map<String,Integer>map,
        String[] report,
        List<Integer>[] reports,
        int size,
        int k){
        for(String res:report){
            String[] temp = res.split(" ");
            int reportIndex = map.get(temp[0]);
            int reportedIndex = map.get(temp[1]);
            if(isCheckReportor[reportedIndex].add(reportIndex)){
                reports[reportedIndex].add(reportIndex);
            }
        }
        int[] answer = new int[size];
        for(int i = 0 ; i < size ; i++){
            if(isCheckReportor[i].size() >= k){
                for(int j = 0 ; j < reports[i].size(); j++){
                    int index = reports[i].get(j);
                    answer[index]++;
                }
            }
        }
        return answer;
    }
    public int[] solution(String[] id_list, String[] report, int k) {
        int size = id_list.length;
        int[] answer = new int[size];
        Map<String,Integer> map = new HashMap<>();
        init(map,id_list);
        Set<Integer>[] isCheckReportor = new HashSet[size];
        List<Integer>[] reports = new ArrayList[size];
        for(int i = 0 ; i < size; i++){
            isCheckReportor[i] = new HashSet<>();
            reports[i] = new ArrayList<>();
        }
        answer = cal(isCheckReportor,map,report,reports,size,k);

        return answer;
    }
}