잡다한 배똥월드

728x90
 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

코딩 테스트 풀이 체크리스트

 

 

 

.

.

.

 

 

 

import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        
        //유저 - 유저가 신고한 사람
        HashMap<String, ArrayList<String>> arr1 = new HashMap<>();

        //유저 - 유저를 신고한 사람
        HashMap<String, ArrayList<String>> arr2 = new HashMap<>();
        HashMap<String, Integer> arr3 = new HashMap<>();
        
        for (int i = 0; i < report.length; i++) {
            String[] temp = report[i].split(" ");
            
            ArrayList<String> list1 = arr1.getOrDefault(temp[0], new ArrayList<>());
            ArrayList<String> list2 = arr2.getOrDefault(temp[1], new ArrayList<>());
            
            if (list1.indexOf(temp[1]) == -1) {
                list1.add(temp[1]);
            }
            
            if (list2.indexOf(temp[0]) == -1) {
                list2.add(temp[0]);
            }
            
            arr1.put(temp[0], list1);
            arr2.put(temp[1], list2);
        }
        
        for (int i = 0; i < id_list.length; i++) {
            ArrayList<String> temp = arr2.getOrDefault(id_list[i], new ArrayList<>());
            arr3.put(id_list[i], temp.size());
        }
        
        for (int i = 0; i < id_list.length; i++) {
            ArrayList<String> temp = arr1.getOrDefault(id_list[i], new ArrayList<>());
            
            for (int j = 0; j < temp.size(); j++) {
                if (arr3.getOrDefault(temp.get(j), 0) >= k) {
                    answer[i]++;
                }
            }
        }
        
        return answer;
    }
}
테스트 1 통과 (0.21ms, 72.8MB)
테스트 2 통과 (0.17ms, 76.5MB)
테스트 3 통과 (460.21ms, 174MB)
테스트 4 통과 (0.28ms, 73.5MB)
테스트 5 통과 (0.44ms, 77.7MB)
테스트 6 통과 (4.40ms, 96.7MB)
테스트 7 통과 (8.58ms, 85.4MB)
테스트 8 통과 (14.57ms, 95.6MB)
테스트 9 통과 (182.74ms, 136MB)
테스트 10 통과 (219.88ms, 137MB)
테스트 11 통과 (475.40ms, 173MB)
테스트 12 통과 (1.24ms, 79.8MB)
테스트 13 통과 (1.23ms, 78.6MB)
테스트 14 통과 (127.59ms, 128MB)
테스트 15 통과 (240.11ms, 162MB)
테스트 16 통과 (1.07ms, 74.1MB)
테스트 17 통과 (1.42ms, 78.6MB)
테스트 18 통과 (2.79ms, 85.5MB)
테스트 19 통과 (3.14ms, 84MB)
테스트 20 통과 (130.37ms, 139MB)
테스트 21 통과 (357.16ms, 175MB)
테스트 22 통과 (0.09ms, 70.5MB)
테스트 23 통과 (0.26ms, 79.2MB)
테스트 24 통과 (0.10ms, 75.9MB)

 

 

 

 

 

해시맵 arr1은 유저가 신고한 유저 리스트

해시맵 arr2는 해당 유저를 신고한 유저 리스트

해시맵 arr3은 해당 유저가 신고당한 수 (배열로 대체 가능할 것 같음)

 

 

 

 

그래서 report 대로 for문을 돌려서 arr1과 arr2를 채워나갑니다.

만약에 중복이라면 추가하지 않고, 중복이 아니라면 추가하는 식으로...

 

 

 

 

그리고 나서 arr3을 채우는데 이건 id_list로 for문을 돌린다.

 

 

 

 

id_list에서 하나씩 꺼내서 arr1의 해당 유저가 신고한 리스트를 가져오고

리스트의 유저들이 몇 번 신고를 당했는지 파악하기 위해 arr3에서 값 가져와서

만약에 k값보다 크거나 같으면 answer++, 아니면 그냥 넘어가는 식으로 작성 후 answer 리턴

 

 

 

 

728x90

+ Recent posts