
id_list: 이용자 ID 목록report: "신고자 피신고자" 문자열 배열 (중복 신고 가능)k: 정지 기준 (동일 이용자가 k번 이상 신고당하면 정지)k번 이상 신고당한 이용자는 정지된다.id_list 순서대로 각 이용자가 받은 메일의 수를 배열로 반환해야 한다.
중복 신고 제거
HashSet<String> reportSet = new HashSet<>(Arrays.asList(report));
report[]에는 같은 사람이 같은 사람을 여러 번 신고할 수 있음.HashSet을 이용해 중복을 제거.각 아이디가 신고당한 횟수 집계
HashMap<String, Integer> reports = new HashMap<>();
for (String id : id_list) {
reports.put(id, 0);
}
for (String r : reportSet) {
String[] tmp = r.split(" ");
reports.put(tmp[1], reports.get(tmp[1]) + 1);
}
정지된 사람을 신고한 사람에게 메일 횟수 증가
for (String r : reportSet) {
String[] tmp = r.split(" ");
if (reports.get(tmp[1]) >= k) {
for (int i = 0; i < id_list.length; i++) {
if (id_list[i].equals(tmp[0])) {
answer[i]++;
break;
}
}
}
}
메일 개수 배열 반환
return answer;
id_list 순서대로 정리한 answer[] 배열을 반환.import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
// 중복되는 신고 없애기
HashSet<String> reportSet = new HashSet<>(Arrays.asList(report));
// 아이디마다 신고 당한 횟수 저장
HashMap<String, Integer> reports = new HashMap<>();
for (String id : id_list) {
reports.put(id, 0);
}
for (String r : reportSet) {
String[] tmp = r.split(" ");
reports.put(tmp[1], reports.get(tmp[1]) + 1);
}
// 해시셋을 순회하며 신고대상의 신고당한 횟수가 k를 넘어서는 경우를 찾는다.
for (String r : reportSet) {
String[] tmp = r.split(" ");
if (reports.get(tmp[1]) >= k) {
for (int i = 0; i < id_list.length; i++) {
if (id_list[i].equals(tmp[0])) {
// 신고자의 메일 받는 횟수를 1 증가시킨다.
answer[i]++;
break;
}
}
}
}
return answer;
}
}