이번에 풀어본 문제는
프로그래머스 신고 결과 받기 입니다.
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 이상인 사용자들을 신고한 사용자들의 카운트값을 올려주고, 배열을 반환해주면 해결할 수 있습니다.
풀어봤던 문제인 것 같은데, 기록을 따로 안해놨었나 보네요 ㅎㅎ 이전에는 어떻게 풀었었는지 궁금해요.....