
보기와 같은 Id_list입력과 [신고자 신고당한사람] 으로 이루어진 배열, 몇번 이상 신고 당하면 정지 당할것인가 알려주는 k를 입력으로 받아 피신고자가 정지당할 경우 신고자에게 메일을 보낸 횟수를 result로 출력해주면 되는 문제다.
중복제거를 위해 신고당한 사람을 key값으로 해쉬맵을 만들어야 겠다는 생각이 들었지만 value값을 중복없이 저장할 방법을 고민하다가 내부에 중복없는 set인 HashSet을 활용해 value값의 중복을 제거해 활용하기로 했다. 풀이를 하다보니 Map이 순서없이 저장되어서 나중에 answer에 추가해주기 위해 이름과 index를 가지는 Map을 하나 더 만들어 이용했다.
import java.util.HashMap;
import java.util.Map;
import java.util.HashSet;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
Map<String,HashSet<String>> reportlist = new HashMap<>();
Map<String,Integer> reportIdx = new HashMap<>();
for(int i = 0; i<id_list.length; i++){
reportIdx.put(id_list[i],i);
reportlist.put(id_list[i],new HashSet<>());
}
for(String rp : report){
String[] strArr = rp.split(" ");
reportlist.get(strArr[1]).add(strArr[0]);
}
for(int i = 0; i<id_list.length; i++){
String name = id_list[i];
if(reportlist.get(name).size() >= k){
for(String s : reportlist.get(name))
answer[reportIdx.get(s)] += 1;
}
}
return answer;
}
}
![]() | ![]() |
|---|