코딩테스트/Programmers

[JAVA] 신고 결과 받기

hxx_1 2024. 5. 23. 21:14

< 풀이 >

import java.util.*;
class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        HashMap<String,Integer> map= new HashMap<>();
        for(int i=0;i<id_list.length;i++){
            map.put(id_list[i],i); // map에 이름과 번호를 저장
        }
        
        int arr[][]=new int[id_list.length][id_list.length]; 
        int accumulated[]=new int[id_list.length]; //신고 누적 횟수 저장
        
        for(int i=0;i<report.length;i++){
            String r[]=report[i].split(" ");
            int reporter=map.get(r[0]); //신고자 번호
            int reported=map.get(r[1]); //신고 당한 사람 번호 
            
            if(arr[reporter][reported]==0){ //(신고자, 신고당한사람) 이 동일한 경우가 없으면
                arr[reporter][reported]++;
                accumulated[reported]++;
            }
        }
        
        for(int i=0;i<accumulated.length;i++){
            if(accumulated[i]<k)
                continue;
            else { //누적된 값이 k 이상일 때 
                for(int j=0;j<arr.length;j++){
                    if(arr[j][i]!=0)
                        answer[j]++;
                }
            }
        }
        
        return answer;
    }
}

 

 

✏️ 풀이 방법

 

1. 해시맵에 id 를 key 값으로, index 값을 value로 하여 저장한다. 

2. report 배열 반복문을 돌며 신고자와 신고 당한 사람의 번호를 구한다. ( arr[0][1] 이라면 0번이 1번을 신고했다는 뜻)

   -> 만약 arr [신고자][신고 당한 사람] 의 값이 0이라면 ( 한 유저가 같은 유저를 신고한 적 없음)

       : arr [신고자][신고 당한 사람] 의 값을 증가시킨다. 

       : accumulated[신고 당한 사람] 의 값 또한 증가시킨다. => 신고 당한 사람의 신고 누적 횟수를 구하기 위함 

3.  accumulated(신고 누적 횟수를 저장) 배열 반복문을 돈다.

     -> 누적된 값이 k 보다 작으면 continue

     -> 누적된 값이 k 보다 크거나 같으면

         : i번째 이용자가 정지를 당했다는 뜻이므로 arr[신고자][i] 의 값이 0이 아닌 사람은 메일을 받게 된다. 

         : answer[신고자] 의 값을 증가시킨다. ( 받게 되는 메일 개수 증가 )

4. answer을 return 

 

✍🏻 느낀점 

 

이 문제를 풀기 위해 처음에 뻘짓을 엄청 했다. 이전에는 arraylist도 쓰고, 정말 많은 변수와 반복문을 사용해서 문제를 풀었더니 계속 런타임 에러가 나서 문제 풀이 방식을 바꾸는 것을 선택했다. 다른 블로그를 보다가 2차원 배열로 풀길래 거기에서 힌트를 얻어 문제를 해결하였다. 다른 사람 코드를 보고 이해하기도 어려워보여서 그냥 포기할까 했는데, 2차원 배열이라는 힌트만 얻고 내 힘으로 풀어서 뭔가 되게 뿌듯하다. 우선 이 문제를 풀기 위해서는 Hashmap에 id에 따른 번호를 저장하는 것이 중요한 것 같다. 이 부분을 생각하지 못하면, 배열로 풀 수가 없기 때문에! 레벨 1인데 왜 이렇게 나는 허덕이고 있을까? ㅎ,, 할 수 있다 🔥