알고리즘/PROGRAMMERS
신고 결과 받기(Lv.1)
현대타운301
2024. 3. 19. 00:00
문제 설명
입출력 예시
요약
k번 이상 신고당한 유저는 이용이 정지되고, 해당 유저를 신고한 유저에게 신고 메일이 발송된다.
id_list 순서대로 신고 메일을 받은 횟수를 return
풀이
문제 해석
중복된 신고는 제외하고 신고 받은 횟수로 이용정지 유저를 구하고 해당 유저를 신고한 유저의 value += 1
접근 방식
1) report 중복 제거
→ set으로 담아서 중복 제거
2) 이용 정지 유저 구하기
→ 신고 받은 유저 map 생성 후 k와 비교해서 set에 저장
3) 이용 정지 유저를 신고한 유저의 value += 1
→ report의 요소를 split 해서 [1]번째 index에 해당하는 유저가 신고당한 유저라면,
[0]번째 index에 해당하는 유저의 value += 1
코드 리뷰
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
HashSet<String> reportSet = new HashSet<>();
HashSet<String> resultSet = new HashSet<>();
HashMap<String, Integer> reportedUsers = new LinkedHashMap<>();
HashMap<String, Integer> resultUsers = new LinkedHashMap<>();
for(String str : id_list) {
reportedUsers.put(str, 0);
resultUsers.put(str, 0);
}
for(String str : report) {
reportSet.add(str); // report의 중복 제거
}
for(String str : reportSet) {
String[] arr = str.split(" ");
String key = arr[1]; // 신고 당한 유저를 key로 설정
reportedUsers.put(key, reportedUsers.getOrDefault(key, 0) + 1);
}
for(String key : reportedUsers.keySet()) {
if(reportedUsers.get(key) >= k) { // k번 이상 신고 당했을 경우
resultSet.add(key); // 이용정지 회원으로 추가
}
}
for(String str : reportSet) {
String[] arr = str.split(" "); // str = "muzi frodo"인 경우
if(resultSet.contains(arr[1])) { // arr[1] = "frodo", 만약 frodo가 이용정지 회원이라면
resultUsers.put(arr[0], resultUsers.getOrDefault(arr[0], 0) + 1); // arr[0] = "muzi", resultMap에서 muzi value += 1
}
}
int[] answer = new int[id_list.length];
for(int i = 0; i < answer.length; i++) {
answer[i] = resultUsers.get(id_list[i]);
}
return answer;
}
}
* refs
https://www.youtube.com/watch?v=jFv2LRVCK6s&list=PLlV7zJmoG4XI9VguUVNMu3pCjssb4aR_0&index=10