반응형
92334
https://school.programmers.co.kr/learn/courses/30/lessons/92334?language=java
풀이
저는 신고자의 기준이 아닌 신고 당하는 사람을 기준으로 코드를 작성했습니다.
📌결과는 신고자의 index의 값을 구해야 합니다.
📌신고자는 같은 유저를 2번 이상 신고해도 1번으로만 처리됩니다. (중복 신고가 불가능합니다.)
중복이 불가능하다는 뜻은 Set이 활용되기 가장 좋은 문제라는 뜻이기도 합니다.
📝풀이1
public int[] solution(String[] id_list, String[] report, int k) {
List<String> id_aryList = Arrays.asList(id_list); // id_list의 index를 편하게 가져오려고 만드는 list
Map<Integer, Set<Integer>> report_map = new HashMap<>(); // 신고 당하는 자가 기준인 map
for (String re : report) {
String[] res = re.split(" "); //res[0]: reporter | res[1]: reported
int reporter = id_aryList.indexOf(res[0]); // 신고자의 index
int reported = id_aryList.indexOf(res[1]); // 신고 당하는 자의 index
Set<Integer> value = report_map.get(reported);
if(value == null) { value = new HashSet<>(); }
value.add(reporter);
report_map.put(reported, value);
}
int[] answer = new int[id_list.length];
for(Integer key : report_map.keySet()) {
Set<Integer> value = report_map.get(key);
if(value.size() >= k) { // k번 이상 신고당한 사람
for(Integer val : value) {
answer[val]++;
}
}
}
return answer;
}
🎈첫 번째 핵심은 id_aryList 입니다.
결과는 신고자의 index 값이므로, 결과를 수집하기 위한 과정에서도 String이 아닌 index값을 저장하기 위해 id_aryList를 만들었습니다.
🎈두 번째 핵심은 Set 입니다. Set은 중복을 제거하기 위한 최고의 Collection입니다.
report_map을 구하는 반복문을 지나고 나면 결과는 아래와 같습니다.
report_map : {0=[2], 1=[0, 2], 3=[0, 1]}
🎈세 번째 핵심은 정지의 기준인 k번 이상 신고당한 사람을 찾아냅니다.
이미 report_map에 신고당한 자를 기준으로 만들어놨기 때문에 몇 번 신고당했는지 찾기는 쉽습니다.
⚡️테스트 케이스 처리속도
테스트 1 〉 통과 (0.18ms, 73.7MB)
테스트 2 〉 통과 (0.32ms, 72.6MB)
테스트 3 〉 통과 (764.55ms, 165MB)
테스트 4 〉 통과 (0.39ms, 75.9MB)
테스트 5 〉 통과 (0.43ms, 75.2MB)
테스트 6 〉 통과 (4.58ms, 82.4MB)
테스트 7 〉 통과 (7.35ms, 83MB)
테스트 8 〉 통과 (12.75ms, 97.2MB)
테스트 9 〉 통과 (180.52ms, 136MB)
테스트 10 〉 통과 (177.37ms, 135MB)
테스트 11 〉 통과 (712.19ms, 174MB)
테스트 12 〉 통과 (2.01ms, 78.3MB)
테스트 13 〉 통과 (2.14ms, 78.8MB)
테스트 14 〉 통과 (325.13ms, 136MB)
테스트 15 〉 통과 (683.57ms, 152MB)
테스트 16 〉 통과 (1.44ms, 78.4MB)
테스트 17 〉 통과 (2.03ms, 78.8MB)
테스트 18 〉 통과 (3.17ms, 78.4MB)
테스트 19 〉 통과 (4.61ms, 76.5MB)
테스트 20 〉 통과 (311.92ms, 128MB)
테스트 21 〉 통과 (673.08ms, 160MB)
테스트 22 〉 통과 (0.17ms, 72.9MB)
테스트 23 〉 통과 (0.22ms, 71.7MB)
테스트 24 〉 통과 (0.19ms, 78.1MB)
처음에는 Stream으로도 풀었는데 코드도 엄청 깔끔해지는 것도 아닌데 처리속도가 1000ms 넘는 게 꽤 많아서 너무 마음에 안 들어서 날려버렸어요.
반응형
'Algorithm > Java' 카테고리의 다른 글
프로그래머스 - N개의 최소공배수 java (0) | 2022.07.11 |
---|---|
프로그래머스 - 로또의 최고 순위와 최저 순위 java :: 2021 Dev-Matching: 웹 백엔드 개발자(상반기) (0) | 2022.07.09 |
프로그래머스 - 숫자 문자열과 영단어 java :: 2021 카카오 채용연계형 인턴십 (0) | 2022.07.08 |
프로그래머스 - 키패드 누르기 java :: 2020 카카오 인턴십 (0) | 2022.07.08 |
프로그래머스 - 신규 아이디 추천 java :: 2021 KAKAO BLIND RECRUITMENT :: 72410 (0) | 2022.07.08 |