프로그래머스 Lv.1 2022 KAKAO BLIND RECRUITMENT 신고 결과 받기
이용자의 ID가 담긴 문자열 배열 id_list, 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열 report, 정지 기준이 되는 신고 횟수 k가 매개변수로 주어질 때, 각 유저별로 처리 결과 메일을 받은 횟수를 배열에 담아 return하는 solution 함수를 작성하는 문제이다.
정지 기준을 넘은 회원이 생겼을 때, 처리 결과 메일을 받을 유저를 저장하는 것에서 고민했다. 한 유저를 여러 번 신고할 수는 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리되기 때문에 중복이 불가하도록 저장되어야 했다. 그래서 set을 사용해야 한다고 생각했다. 이를 정지당한 유저의 아이디와 매칭시키기 위해 Map을 사용하였다.
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
Map<String, HashSet<String>> map = new HashMap<>(); // 신고당한 아이디, 신고한 아이디들
for (int i = 0; i < id_list.length; i++) {
HashSet<String> set = new HashSet<String>();
map.put(id_list[i], set);
}
for (int i = 0; i < report.length; i++) {
String[] RIDs = report[i].split(" ");
map.get(RIDs[1]).add(RIDs[0]);
}
for (int i = 0; i < id_list.length; i++) {
if (map.get(id_list[i]).size() >= k) { // 해당 아이디를 신고한 id가 k개 이상이면 정지
for (int j = 0; j < id_list.length; j++) {
if (map.get(id_list[i]).contains(id_list[j])) {
answer[j]++;
}
}
}
}
return answer;
}
}