2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기
Updated:
Java
신고 결과 받기
문제
접근 방법
- Map<String, Set>으로 신고자 - 신고당한 사람 을 담는다
- Map<String, Int>로 사람 - 신고당한 횟수 정의
- 단, 해당 1번 map의 contains 체크를 통해 이미 신고당했는지 확인
- 2번 map에서 k번 이상 신고당한 사람의 list를 구한다.
- 1번 map과 list를 비교하여 contains로 각 사람에 대하여 신고 처리 결과 횟수를 센다.
코드
class Solution {
static public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
Map<String, Set<String>> reportMap = new HashMap<>();
Map<String, Integer> reportCnt = new HashMap<>();
int IDlen = id_list.length;
for(int i = 0; i < IDlen; i++) {
reportMap.put(id_list[i], new HashSet<String>());
reportCnt.put(id_list[i], 0);
}
int r_len = report.length;
String[] sp;
for(int i = 0; i < r_len; i++) {
sp = report[i].split(" ");
// 중복 신고 확인
if(!reportMap.get(sp[0]).contains(sp[1])) {
// 신고 추가
reportMap.get(sp[0]).add(sp[1]);
// 신고당한 사람의 횟수를 증가한다.
reportCnt.replace(sp[1], reportCnt.get(sp[1]) + 1);
}
}
// 정지 당한 리스트
List<String> banned = new ArrayList<>();
for(int i = 0; i < IDlen; i++) {
if(reportCnt.get(id_list[i]) >= k) {
banned.add(id_list[i]);
}
}
// 처리 결과 메일의 횟수
String curU;
for(int i = 0; i < IDlen; i++) {
curU = id_list[i];
for(String ban : banned) {
if(reportMap.get(curU).contains(ban)) {
answer[i]++;
}
}
}
return answer;
}
public static void main(String[] args) {
String[] sList = new String[] { "con", "ryan" };
String[] rList = new String[] { "ryan con", "ryan con", "ryan con", "ryan con" };
int k = 3;
System.out.println(Arrays.toString(solution(sList, rList, k)));
}
}