새소식

📘 기초 지식/알고리즘

[알고리즘 풀이] 신고 결과 받기

  • -

 

수도 코드

모든 사용자 정보가 id_list에 존재

0. 사용자별로 신고당한 횟수를 기록하는 자료 필요 (초기화): reported[user] = 0

1. report를 순회하면서 아래 작업을 수행

   1.1 신고자와 신고당한 자를 구분 : src, dst(string.split(" "))

   1.2 각 사용자별로 신고한 사람을 기록 :  reporter[src] = Set("dst1", "dst2")

   1.3 각 사용자별로 신고당한 횟수를 기록 : reported[dst] =  reported[dst] + 1

      1.3.1 이 때 동일한 사람에게 신고한 경우 횟수를 업데이트 하지 않는다

2. reported를 순회하면서 k이상인 사람을 filter한다. banned

3. reporter를 순회하면서 banned에 포함된 사람이 있는지 확인한다.

 

 

import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
       
        Map<String, Integer> reported = new HashMap<>();
        Map<String, Set<String>> reporter = new HashMap<>();
        
        //초기화
        for (String id : id_list) {
            reported.put(id, 0);
            reporter.put(id, new HashSet<>());
        }
        
        for (String r : report) {
            String[] srcToDst = r.split(" ");
            String src = srcToDst[0];
            String dst = srcToDst[1];
            
            // src가 dst를 신고했다
            // 동일한 사용자에 대한 신고는 무시
            if (reporter.get(src).contains(dst) == false) {
                reported.put(dst, reported.get(dst) + 1);
                reporter.get(src).add(dst);
            }
        }
        
        // k번 이상 신고 당한 사람을 신고한 사람에게 메일을 보낸다
        int[] answer = new int[id_list.length];
        for (int i = 0; i < id_list.length; i++) {
            String src = id_list[i];
            int count = 0;
            // src가 신고한 사용자들
            for (String dst : reporter.get(src)) {
                if (reported.get(dst) >= k) count++;
            }
            answer[i] = count;
        }
        
        return answer;
    }
}

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.