[Programmers / Level 1] 92334. 신고 결과 받기 / 2022 KAKAO BLIND RECRUITMENT (Java)

이하얀·2024년 11월 17일
0

🕊️ 프로그래머스

목록 보기
70/82

💡 Info




입출력 조건




입출력 예시




문제 이해


  • 각 유저별 처리 결과 메일을 받은 횟수를 출력하는 문제
    • 각 유저는 한 번에 한 명의 유저 신고 가능
    • 신고 횟수 제한 없음
    • 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리
    • k번 이상 신고된 유저 : 게시판 이용 정지 + 해당 유저를 신고한 모든 유저에게 정지 사실 메일 발송
    • 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일 발송


알고리즘


풀이 시간 : 45분

  • 사용자별 신고자 저장을 위한 해시맵 생성, 인덱스 매핑
  • report 배열
    • 각 신고 내역 -> 신고받은 사용자 정보 저장(중복 방지 용도)
  • 사용자가 받은 신고 수가 k 이상
    • 해당 사용자들을 신고한 사람들의 신고 횟수 증가
  • 알림 횟수를 배열로 반환
import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        Map<String, Set<String>> reportMap = new HashMap<>();
        Map<String, Integer> userIndexMap = new HashMap<>();

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

        for (String entry : report) {
            String[] parts = entry.split(" ");
            reportMap.get(parts[1]).add(parts[0]);
        }

        for (String user : id_list) {
            Set<String> reporters = reportMap.get(user);
            if (reporters.size() >= k) {
                for (String reporter : reporters) {
                    answer[userIndexMap.get(reporter)]++;
                }
            }
        }
        return answer;
    }
}


결과

profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE&Data Science 개발 기록 노트☘️

0개의 댓글