알고리즘/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