import java.util.*;
public class Pro_신고결과받기 {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
// 각 아이디의 위치
Map<String, Integer> map = new HashMap<>();
// 신고당한 사람과 신고자 명단 저장
Map<String, Set> reports = new HashMap<>();
for(int i = 0; i < id_list.length; i++){
map.put(id_list[i], i);
reports.put(id_list[i], new HashSet<String>());
}
// report의 신고 기록을 set에 담아 중복 제거
for(int i = 0; i < report.length; i++){
String by = report[i].split(" ")[0];
String to = report[i].split(" ")[1];
Set<String> list = reports.get(to);
list.add(by);
}
// id_list를 돌머
for(int i = 0; i < id_list.length; i++){
Set<String> list = reports.get(id_list[i]);
// 각 set의 길이가 k 이상일 때만
if(list.size() >= k){
// 신고를 한 사람의 배열 위치에 +1을 해줌
Iterator<String> iter = list.iterator();
while(iter.hasNext()){
int pos = map.get(iter.next());
answer[pos]++;
}
}
}
return answer;
}
}
일단 각 id 개수만큼의 신고 기록을 저장할 int형 배열을 선언한다.
id_list를 한번씩 돌면서 2개의 맵을 선언한다.
하나는 id와 배열 위치를 저장하고,
하나는 id와 신고자의 명단을 저장할 set을 저장한다.
이번에는 report를 한번 돌며 각 id에 매칭되는 set에 신고자의 이름을 담아준다.
마지막으로 id_list를 돌며 각 id가 신고당한 횟수가 k 이상일 때
set에 저장된 신고자 이름과 매칭되는 배열의 위치에 +1을 해준다.
배열을 리턴한다.