코드해설)
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
class Solution {
public static int[] solution(String[] id_list, String[] report, int k) {
int[] answer = {};
answer = new int[id_list.length];
/*
* key 는 유저ID
* value 는 신고한 유저ID의 set 을 가진 map
* 동일한 유저ID에 대한 신고횟수는 1회로 처리하기 때문에 중복 허용을 하지 않는 set 을 value 로 사용
* */
Map<String, HashSet<String>> reportedMap = new HashMap<>(); // [신고된ID, [신고한ID]]
Map<String, Integer> answerMap = new HashMap<>(); // [신고된Id, 메일 수]
/* 1. Map 초기화 */
for (int i = 0; i < id_list.length; i++) {
HashSet<String> reportingId = new HashSet<>(); // 신고한ID
reportedMap.put(id_list[i], reportingId); // 유저ID, 신고한ID 초기 세팅
answerMap.put(id_list[i], 0); // 메일 수는 모두 0 으로 초기화
}
System.out.println("[STEP 1] reportedMap : " + reportedMap);
System.out.println("[STEP 1] answerMap : " + answerMap);
/*
* 2. 신고 기록 세팅 report 는 "신고한ID 신고된ID" 로 구성됨
*/
for (String s : report) {
String[] reportStr = s.split(" ");
String reportingID = reportStr[0]; // 신고한ID
String reportedID = reportStr[1]; // 신고된ID
reportedMap.get(reportedID).add(reportingID); // 신고된ID 를 key 값으로 신고한ID 배열을 value 로 새팅
}
System.out.println("[STEP 2] reportedMap 에 신고 기록 세팅 : " + reportedMap);
/*
* 3. 유저가 받은 이용 정지 결과 메일 세팅
*/
for (String reportedUser : reportedMap.keySet()) { // reportedUser 는 신고된ID유저
HashSet<String> userForSend = reportedMap.get(reportedUser); // reportedUser(신고된유저)를 신고한 유저
if (userForSend.size() >= k) { // 신고된 횟수가 K번 이상일 경우
for (String userId : userForSend) {
answerMap.put(userId, answerMap.get(userId) + 1); // answerMap 에 신고된Id 별 메일 수 넣기
}
}
}
System.out.println("[STEP 3] answerMap 에 메일 수 세팅 : " + answerMap);
/*
* 4. 유저ID 별 받은 메일 수를 answer 에 세팅
*/
for (int i = 0; i < id_list.length; i++) {
answer[i] = answerMap.get(id_list[i]);
System.out.println("[STEP 4] answer : " + answer[i]);
}
return answer;
}
}
출처 : 은젼의 뒤죽박죽 개발로그
몇분 간 코드를 읽어보니 이해가 되었다. 하지만 의문점이 하나 있는데, reportedMap에서 굳이 value의 타입으로 HashSet<String>을 사용했어야 하는지이다.
관련 개념을 더 공부해보고 어제 마무리 짓지 못했던 나의 코드를 수정하는 과정을 거쳐야겠다.
'코딩테스트 연습(with java) > 프로그래머스' 카테고리의 다른 글
프로그래머스<3진법 뒤지기> - with Runtime Errors (0) | 2022.08.14 |
---|---|
프로그래머스<2016년> (0) | 2022.08.13 |
프로그래머스<신고하기>-2차 수정 (0) | 2022.08.10 |
프로그래머스<신고결과> (0) | 2022.08.08 |
프로그래머스<신고 결과 받기> (0) | 2022.08.07 |