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
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 - 신규 아이디 추천 (1단계) (0) | 2022.03.23 |
---|---|
[Java] 프로그래머스 - 로또의 최고 순위와 최저 순위 (1단계) (0) | 2022.03.22 |
[스킬업] 고양이 사진첩 애플리케이션 (0) | 2022.03.11 |
고양이 사진 검색 사이트 - 3. 검색 페이지 관련 (0) | 2022.03.08 |
고양이 사진 검색 사이트 - 2. 이미지 상세 보기 모달 관련 (0) | 2022.03.07 |