회고 : 대학생 때는 C, 이후에는 파이썬으로 코테 문제 풀다가, java로 코딩 테스트 문제 처음 풀어보니 굉장히 낯설다.
맨날 파이썬에서 list, dict 편하게 쓰다가 int[], string[] 마주치니 뭔가 싶었는데 예전에 배열을 저렇게 썼었던 게 뒤늦게 기억이 났다. hashmap 반복문 돌리기 상당히 귀찮기도 함. 문법 검색해가면서 돌아가도록은 구현하였고 다른 사람 작성한 코드 보면서 공부해야 할 듯.
// 한 유저가 동일한 유저 신고했을 때 카운트 1회로 처리해야 함
// 특정 유저가 n번 이상 신고되었을때 그 신고한 유저에게 메일 보내야 함.
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.HashMap;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = {};
LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>(Arrays.asList(report));
// System.out.println(linkedHashSet);
HashMap<String, List<String>> reportIdList_Id = new HashMap<String, List<String>>();
HashMap<String, Integer> reportId_reportCnt = new HashMap<String, Integer>();
for(String i : linkedHashSet){
//System.out.println(i);
String[] i_r = i.split(" ");
String id = i_r[0];
String report_id = i_r[1];
// System.out.println(id+ report_id);
if(reportId_reportCnt.containsKey(report_id) == false){
reportId_reportCnt.put(report_id, 1);
}else{
reportId_reportCnt.put(report_id, reportId_reportCnt.get(report_id) +1);
}
if(reportIdList_Id.containsKey(report_id) == false){
List<String> arr = new ArrayList<String>();
arr.add(id);
reportIdList_Id.put(report_id, arr);
}else{
List<String> arr = reportIdList_Id.get(report_id);
arr.add(id);
reportIdList_Id.put(report_id, arr);
}
}
List<String> list = new ArrayList<String>();
reportId_reportCnt.forEach((key,value)->{
if(value<k){
list.add(key);
}
}
);
for(String s : list){
reportIdList_Id.remove(s);
}
// reportIdList_Id.forEach((key, value)->{
// if(list.contains(key)){
// }
// });
int[] ans = new int[id_list.length];
int index = 0;
for(String i : id_list){
int count = 0;
// reportIdList_Id.forEach((key,value)->{
// if(value.contains(i)) {
// count = count+1;
// }
// });
for(String key : reportIdList_Id.keySet()){
if(reportIdList_Id.get(key).contains(i))
count++;
}
ans[index++]= count;
}
// System.out.println(list);
// System.out.println(reportId_reportCnt);
// System.out.println(reportIdList_Id);
// System.out.println(ans);
return ans;
}
}
댓글