- 회고
74. 신고 결과 받기 : https://school.programmers.co.kr/learn/courses/30/lessons/92334
- 풀이 과정
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
List<String> idLi = Arrays.asList(id_list);
Map<String, Integer> idMap = new HashMap<>();
Set<String> reSet = new HashSet<>();
List<String> banId = new ArrayList<>();
int[] answer = new int[id_list.length];
for (String s : id_list) {
idMap.put(s, 0);
}
for (String r : report) {
reSet.add(r);
}
for (String s : reSet) {
String[] repot = s.split(" ");
idMap.put(repot[1], idMap.get(repot[1]) + 1);
}
for (String key : idMap.keySet()) {
if (idMap.get(key) >= k) {
banId.add(key);
}
}
for (String r : reSet) {
String[] rArr = r.split(" ");
if(banId.contains(rArr[1])){
answer[idLi.indexOf(rArr[0])]++;
}
}
return answer;
}
}
- 신고 횟수 저장을 위한 idMap생성
- 중복신고 제외를 위한 reportSet(reSet)생성
- 신고당한 횟수 확인을 위해 reSet을 순회하며 idMap에 신고횟수 누적
- idMap의 value값이 2이상 되는 key를 banId에 추가
- reSet을 순회하며 신고당한 사람이 banId에 포함되면 메일발송 +1진행
※ 마지막 메일발송을 위한 for문을 진행할 때 처음에는 시간초과가 발생했다.
for(int i = 0; i < id_list.length; i++){
for (String b : banId) {
String send = id_list[i] + " " + b;
if(reLi.contains(send)){
answer[i]++;
}
}
}
다른 코드들 대비 해당 코드만 이중 포문으로 시간복잡도가 O(n^2)이어서 해당 부분 코드를 수정했다.
- 진행
일자 | 완료 번호 |
24.07.16 ~ 24.07.31 | 1~63 |
24.08.01 | 64 |
24.08.02 | 65 |
24.08.05 | 66 |
24.08.06 | 67 |
24.08.07 | 68 |
24.08.08 | 69 |
24.08.09 | 70 |
24.08.12 | 71 |
24.08.13 | 72 |
24.08.14 | 73 |
24.08.19 | 74 |
'Java & Spring > 코딩테스트' 카테고리의 다른 글
26일차 - SQL 코드카타 (0) | 2024.08.20 |
---|---|
26일차 - 알고리즘 코드카타 (0) | 2024.08.20 |
23일차 - 알고리즘 코드카타 (0) | 2024.08.14 |
22일차 - 알고리즘 코드카타 (0) | 2024.08.13 |
21일차 - 알고리즘 코드카타 (0) | 2024.08.12 |