알고리즘
프로그래머스 신고 결과 받기(JAVA)
박카스마시며코딩
2022. 2. 20. 18:17
https://programmers.co.kr/learn/courses/30/lessons/92334
코딩테스트 연습 - 신고 결과 받기
문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의
programmers.co.kr
저는 Map(map)을 이용해 사용자와 인덱스를 매핑시켰습니다.
Set(isCheckReportor)를 이용해 각각의 인덱스에 대해 신고했는지를 판단하였고, List(reports)를 통해 누가 이사람을 신고하였는지를 저장하였습니다.
마지막으로 List(reports)를 통해 각각의 사람이 몇개의 결과 메일을 받았는지를 확인하였습니다.
package Programmers.KAKAO_2022;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class 신고_결과_받기 {
private static void init(Map<String,Integer>map , String[] id_list){
for(int i = 0 ; i < id_list.length ; i++){
map.put(id_list[i],i);
}
}
private static int[] cal(Set<Integer>[] isCheckReportor,
Map<String,Integer>map,
String[] report,
List<Integer>[] reports,
int size,
int k){
for(String res:report){
String[] temp = res.split(" ");
int reportIndex = map.get(temp[0]);
int reportedIndex = map.get(temp[1]);
if(isCheckReportor[reportedIndex].add(reportIndex)){
reports[reportedIndex].add(reportIndex);
}
}
int[] answer = new int[size];
for(int i = 0 ; i < size ; i++){
if(isCheckReportor[i].size() >= k){
for(int j = 0 ; j < reports[i].size(); j++){
int index = reports[i].get(j);
answer[index]++;
}
}
}
return answer;
}
public int[] solution(String[] id_list, String[] report, int k) {
int size = id_list.length;
int[] answer = new int[size];
Map<String,Integer> map = new HashMap<>();
init(map,id_list);
Set<Integer>[] isCheckReportor = new HashSet[size];
List<Integer>[] reports = new ArrayList[size];
for(int i = 0 ; i < size; i++){
isCheckReportor[i] = new HashSet<>();
reports[i] = new ArrayList<>();
}
answer = cal(isCheckReportor,map,report,reports,size,k);
return answer;
}
}