[ 프로그래머스 ] ##92334 : 신고 결과 받기 - JAVA

🔗 신고 결과 받기

import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
// 한 번에 한 번 신고, 신고 횟수는 무제한
// 한 유저에 여러 번 신고 해도 신고 횟수는 1회로 처리
// k번 이상 신고된 유저는 이용 정지 -> 신고한 유젛에게 정지 사실을 알림
// id_ list : 이용자의 ID
// report : 각 이용자가 신고한 이용자의 ID정보 ("신고자 신고당한이용자")
// k : 정지 기준
List<Integer> result=new ArrayList<>();
// 신고자 id , 신고한 사람 list
Map<String,List<String>> reporter= new HashMap<>();
// 신고당한 사람 id , 신고당한 횟수
Map<String, Integer> reported= new HashMap<>();
for(int i=0;i<report.length;i++){
String[] r=report[i].split(" ");
// 신고자 map의 value 값 초기화
if(!reporter.containsKey(r[0])){
reporter.put(r[0],new ArrayList<>());
}
// 아직 신고 안 했다면
if(!reporter.get(r[0]).contains(r[1])){
// 신고하고
reporter.get(r[0]).add(r[1]);
// 횟수 업데이트
reported.put(r[1],reported.getOrDefault(r[1],0)+1);
}
}
for(String id : id_list){
int cnt=0;
if(!reporter.containsKey(id)){
result.add(0);
continue;
}
// 해당 사용자가 신고한 신고자 list
List<String> reportedUsers=reporter.get(id);
for(String reportedUser:reportedUsers){
// k 번 이상 신고 당했다면
if(reported.get(reportedUser)>=k){
cnt++;
}
}
result.add(cnt);
}
return result.stream().mapToInt(Integer:: intValue).toArray();
}
}