https://school.programmers.co.kr/learn/courses/30/lessons/92334
유저별로 자신의 신고한 유저가 누구인지를 저장하는 HashMap을 만들자
한 유저가 동일한 유저를 여러 번 신고하는 경우를 위해 유저별 자신을 신고한 유저를 HashSet 형태로 저장!
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
/**
- HashMap<String, Integer> 형식으로 유저 별 순서번호 저장 idMap
- HashMap<String, HashSet<String>> 유저별 자신을 신고한 유저!
**유저별로 자신의 신고한 유저가 누구인지를 저장하는 HashMap을 만들자**
**한 유저가 동일한 유저를 여러 번 신고하는 경우를 위해 유저별 자신을 신고한 유저를 HashSet 형태로 저장!**
1. idMap에 유저에 따라 번호 저장
2. 신고 배열을 통해 유저별 자신을 신고한 유저에 저장
3. 유저별 자신을 신고한 유저가 k명 이상이면 그 신고한 유저에게 메일 전송
**/
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
HashMap<String, Integer> idMap = new LinkedHashMap<>(); // 유저 번호 저장
HashMap<String, HashSet<String>> reportMap = new HashMap<>();
// 신고당한 유저와 그 유저를 신고한 유저
// 동일한 유저가 동일한 유저를 여러 번 신고해도 한 번으로 취급됨!
// 유저 번호 저장
for(int i=0; i<id_list.length; i++){
idMap.put(id_list[i], i);
reportMap.put(id_list[i], new HashSet<>());
}
// 신고 유저 저장
for(String s : report){
String[] str = s.split(" ");
reportMap.get(str[1]).add(str[0]); // (신고당한 유저, 신고한 유저)
}
// k번 이상 신고당한 유저가 존재하는 경우 그 유저를 신고한 유저에게 메일 전송 횟수+1
// HashSet 개수로 판단
for(int i=0; i<id_list.length; i++){
HashSet<String> reporter = reportMap.get(id_list[i]);
if(reporter.size() >= k){
// 신고 횟수가 k번이 넘은 사람
for(String name : reporter){
answer[idMap.get(name)]++; // answer[유저번호]++;
}
}
}
return answer;
}
}