알고리즘/카카오
2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기
BSHwan
2022. 1. 19. 23:11
반응형
https://programmers.co.kr/learn/courses/30/lessons/92334
코딩테스트 연습 - 신고 결과 받기
문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의
programmers.co.kr
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
public class Solution {
public static int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
HashMap<String, Integer> idx = new HashMap();
HashMap<String, Integer> user_report_cnt = new HashMap();
// 0. 동일 유저신고를 제거
Set<String> set = new HashSet(Arrays.asList(report));
String[] report_dup_remove = set.toArray(new String[0]);
// 1. 각 유저ID에 index설정
for(int i=0; i<id_list.length; i++) {
idx.put(id_list[i], i);
user_report_cnt.put(id_list[i], 0);
}
// 2. 유저가 신고한 사람을 관리할 배열
ArrayList[] user_report_list = new ArrayList[id_list.length];
// 2-1. 배열 초기화
for(int i=0; i<id_list.length; i++) {
user_report_list[i] = new ArrayList();
}
// 3. report 배열을 돌면서 유저가 신고한 사람들을 업데이트
// 4. 신고당한 횟수 증가
for(int i=0; i<report_dup_remove.length; i++) {
String[] str_arr = report_dup_remove[i].split(" ");
String user = str_arr[0];
String reported_user = str_arr[1];
// 유저가 신고한사람 업데이트
user_report_list[idx.get(user)].add(reported_user);
// 신고당한 횟수 1 증가
int cnt = user_report_cnt.get(reported_user);
user_report_cnt.put(reported_user, cnt+1);
}
// for(int i=0; i<user_report_list.length; i++) {
// System.out.println(id_list[i] + "가 신고한사람들 : " + user_report_list[i]);
// }
// for(int i=0; i<user_report_cnt.size(); i++) {
// System.out.println(id_list[i] + "가 신고당한 횟수 : " + user_report_cnt.get(id_list[i]));
// }
ArrayList<String> k_up_reported_user = new ArrayList();
// k 이상 신고당한 사람 구하기
for(int i=0; i<id_list.length; i++) {
if(user_report_cnt.get(id_list[i]) >= k) {
k_up_reported_user.add(id_list[i]);
}
}
// 정답구하기 => 유저가 신고했던 사람들중에 k번이상 신고당한사람이 몇명있나?
for(int i=0; i<id_list.length; i++) {
int cnt = 0;
for(int j=0; j<k_up_reported_user.size(); j++) {
if(user_report_list[i].contains(k_up_reported_user.get(j))) cnt+=1;
}
answer[i]=cnt;
}
// System.out.println(Arrays.toString(answer));
return answer;
}
}
반응형