프로그래머스 신고 결과 받기 (Java,자바)

jonghyukLee·2022년 5월 10일
0

이번에 풀어본 문제는
프로그래머스 신고 결과 받기 입니다.

📕 문제 링크

❗️코드

import java.util.*;
class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer;
        Map<String, HashSet<String>> reports = new HashMap<>();
        Map<String,Integer> memberIdx = new HashMap<>();

        int listSize = id_list.length;
        for(int i = 0; i < listSize; i++)
        {
            memberIdx.put(id_list[i],i);
            reports.put(id_list[i],new HashSet<>());
        }

        for(String reportInfo : report)
        {
            StringTokenizer st = new StringTokenizer(reportInfo);
            String reportFrom = st.nextToken();
            String reportTo = st.nextToken();

            // 신고한 멤버 이름 추가 , HashSet으로 중복신고 제외
            reports.get(reportTo).add(reportFrom);
        }

        answer = new int[listSize];
        
        for(String key : reports.keySet())
        {
            HashSet<String> set = reports.get(key);
            //누적 신고횟수가 k 이상일 경우
            if(set.size() >= k)
            {
                // 신고한 멤버의 카운트++
                for(String member : set) answer[memberIdx.get(member)]++;
            }
        }
        return answer;
    }
}

📝 풀이

각 사용자가 게시판 불량 이용자를 신고할 수 있을 때, 누적하여 신고당한 횟수가 k 이상인 사용자를 정지시키고, 해당 사용자를 신고한 사용자에게 알림 이메일을 전송한다고 할 때, 신고한 사용자가 받게 되는 이메일의 개수를 구하는 문제입니다.
한 사용자를 여러 차례 신고하는 중복은 제외시킨다는 조건이 있기 떄문에 HashSet을 사용했고, HashMap에서 key값을 사용자명, value의 set의 크기는 신고당한 횟수, String 값들은 자신을 신고한 사용자들의 이름이 될 것입니다. 마지막으로, Set의 크기를 통해 누적 신고횟수가 k 이상인 사용자들을 신고한 사용자들의 카운트값을 올려주고, 배열을 반환해주면 해결할 수 있습니다.

📜 후기

풀어봤던 문제인 것 같은데, 기록을 따로 안해놨었나 보네요 ㅎㅎ 이전에는 어떻게 풀었었는지 궁금해요.....

profile
머무르지 않기!

0개의 댓글