티스토리 뷰

728x90
반응형

문제

신고 시스템을 구현하여 특정 기준에 따라 신고된 유저의 계정을 정지하고, 신고자에게 결과를 메일로 알리는 과정을 코드로 구현하는 문제이다.

각 유저의 신고는 중복되지 않게 처리해야 하며, 최종적으로 신고 결과에 따라 신고자가 받은 정지 메일 갯수를 반환한다.

풀이

  • 정보를 저장할 HashMap들을 초기화한다.
    • 각 유저별로 그 유저를 신고한 사람들의 목록을 저장하기 위한 HashMap을 초기화한다. 이때 신고한 사람들의 중복을 허용하지 않기 위해 HashSet을 사용한다.
    • 유저별 메일 수신 횟수를 저장할 HashMap도 초기화합니다.
  • 신고 정보를 저장한다.
    • 신고 기록을 순회하며 신고자와 피신고자를 분리하고, 피신고자의 HashSet에 신고자를 추가한다.
  • 신고 횟수 조건을 체크하여 정지 메일을 보낸다.
    • k번 이상 신고된 유저를 찾아 그 유저를 신고한 모든 유저에게 메일을 발송한다.
    • 즉 메일 수신 횟수를 1 증가시킨다.
  • id_list를 순회하면서 각 유저의 메일 수신 횟수를 담은 배열을 생성하여 return 한다.

Java 코드

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        // 유저별 신고 정보 저장 (중복 방지를 위해 HashSet 사용)
        Map<String, HashSet<String>> reports = new HashMap<>();

        // 유저별 결과 메일 수신 횟수 저장
        Map<String, Integer> mailCount = new HashMap<>();

        // 초기화
        for (String user: id_list) {
            reports.put(user, new HashSet<>());
            mailCount.put(user, 0);
        }

        // 신고 정보 저장
        for (String r: report) {
            String[] splitReport = r.split(" ");
            String reporter = splitReport[0]; // 신고자
            String reported = splitReport[1]; // 피신고자

            reports.get(reported).add(reporter);
        }

        // k번 이상 신고인지 확인하고 메일 보내기
        for (String reportedUser: reports.keySet()) {
            HashSet<String> reporters = reports.get(reportedUser);
            if (reporters.size() >= k) {
                // 신고자에게 메일 보내기
                for (String reporter: reporters) {
                    mailCount.put(reporter, mailCount.get(reporter)+1);
                }
            }
        }

        // 결과를 배열로 반환
        int[] answer = new int[id_list.length];
        for (int i = 0; i < id_list.length; i++) {
            answer[i] = mailCount.get(id_list[i]);
        }
        return answer;
    }
}

 

문제출처

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

728x90
반응형
댓글