티스토리 뷰
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
728x90
반응형
'Study > Coding Test' 카테고리의 다른 글
[프로그래머스 / Python] 미로 탈출 명령어 (DFS) (0) | 2023.11.26 |
---|---|
[백준 BOJ / Python] 2473번 세 용액 (0) | 2023.08.09 |
[프로그래머스 / Python] 주차 요금 계산 (0) | 2023.07.11 |
[백준 BOJ / Python] 30805번 사전 순 최대 공통 부분 수열 (0) | 2023.07.11 |
[프로그래머스 / Python] 크레인 인형뽑기 게임 (0) | 2023.06.29 |
댓글