본문 바로가기
Algorithm/programmers

2022 Kakao blind 92334 - 신고 결과 받기(해쉬, 구현) - Java 풀이

by Ellery 2022. 3. 24.

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

 

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

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

programmers.co.kr

- 모든 유저들에 대해서 그 유저가 신고한 사람들이 정지처분을 받았을 경우 카운트를 해주면 되는데 동일인 신고시의 중복제거를 해줘야한다. 해시맵을 2개 선언해서 하나는 아이디String-인덱스Integer 페어를 담고, 하나는 아이디String-중복제거용해시Set을 담아서 리포트 배열을 읽어내려가면서 해당 유저를 누가 신고했는지 Set에 담아준다.  Set 사이즈가 k이상이면 해당 셋에 담겨있는 신고자의 배열값을 1 증가시킨다.

 

import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int N = id_list.length, M = report.length;
        int[] answer = new int[id_list.length];
        
        Map<String, Integer> m = new HashMap<>();
        for(int i = 0; i < N; ++i) {
            m.put(id_list[i], i);
        }
        
        Map<String, Set<String>> map = new HashMap<>();
        for(int i = 0; i < N; ++i) {
            map.put(id_list[i], new HashSet<String>());
        }
        
        for(int i = 0; i < M; ++i) {
            StringTokenizer st = new StringTokenizer(report[i]);
            String u = st.nextToken(), v = st.nextToken();
            map.get(v).add(u);
        }
        
        for(String key: map.keySet()) {
            Set<String> set = map.get(key);
            if(set.size() >= k) {
                for(String s: set) ++answer[m.get(s)];
            }
        }
        
        return answer;
    }
}