문제 출처: https://programmers.co.kr/learn/courses/30/lessons/92334
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] res = new int[id_list.length];
Map<String, Set<String>> map = new HashMap<>();
Map<String, Integer> cnt = new LinkedHashMap<>();
// id_list의 순서대로 값을 출력해야 한다.
// report는 띄어쓰기로 구분되어 신고자, 피신고자로 들어온다. 피신고자가 key, 신고자가 value다.
for (int i = 0; i < id_list.length; i++) {
map.put(id_list[i], new HashSet<>());
cnt.put(id_list[i], 0);
}
StringTokenizer tokenizer = null;
for (int i = 0; i < report.length; i++) {
tokenizer = new StringTokenizer(report[i]);
String from = tokenizer.nextToken(); // 신고자
String to = tokenizer.nextToken(); // 피신고자
map.get(to).add(from);
}
for (int i = 0; i < id_list.length; i++) {
if (map.get(id_list[i]).size() >= k) {
// k번 이상 신고 당한 경우 메일 전송
for (String name : map.get(id_list[i])) {
cnt.put(name, cnt.get(name) + 1);
}
}
}
int index = 0;
for (Map.Entry<String, Integer> entry : cnt.entrySet()) {
res[index++] = entry.getValue();
}
return res;
}
}