❓ 문제 - 2022 KAKAO BLIND RECRUITMENT 신고 결과 받기 - JAVA 풀이법
출처
(https://programmers.co.kr/learn/courses/30/lessons/92334)
📝 문제해결법
1. Hash의 자료구조를 사용해서 풀었다.
- reportHash라는 HashMap에 Key(String) : 신고한 사람, Value(HashSet<String>) : 신고 당한 사람 형태로 저장한다.
- count라는 HashMap에는 Key(String) : 신고당한 사람, Value(Integer) : 신고당한 횟수로 저장한다.
- report 배열 하나씩 신고한 사람 -> 신고할 사람으로 정보를 꺼내서 혹시 신고한 사람이 이미 신고할 사람을 신고했는지 체크한 후에 신고하지 않았다면 신고 처리를 해준다.
- 모든 신고 처리가 끝난 후 다시 reportHash와 count의 HashMap을 이용해서 유저가 신고한 사람들 중 몇 명이 게시판 이용이 정지되었는지 answer에 넣어준다.
2. 느낀점
- 일단 처음에 HashMap을 두 개를 사용했지만, HashSet을 이용하지 않고 String 형태로 더해주는 처리하고 중복은 contains를 활용했떠니 일부 테스트케이스는 틀리고 시간이 전체적으로 높게 나왔다.
- HashMap안에 Value에 HashSet의 자료구조가 한 번 더 이용할 수 있구나 배웠다 !
💻 소스코드
// 2022 KAKAO BLIND RECRUITMENT - 신고결과받기 - Hash 이용 - 신고 결과 받기
// Hash
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
public class Solution {
public static void main(String[] args) {
}
public static int[] solution(String[] id_list, String[] report, int k) {
HashMap<String, HashSet<String>> reportHash = new HashMap<String, HashSet<String>>();
HashMap<String, Integer> count = new HashMap<String, Integer>();
int[] answer = new int[id_list.length];
for(String id:id_list) {
reportHash.put(id, new HashSet<String>());
count.put(id, 0);
}
for(String s:report) {
String[] str = s.split(" ");
if(!reportHash.get(str[0]).contains(str[1])) {
int cnt = count.get(str[1]);
count.put(str[1], cnt+1);
reportHash.get(str[0]).add(str[1]);
}
}
for(int i=0;i<id_list.length;i++) {
int cnt = 0;
for(String id:reportHash.get(id_list[i])) {
if(count.get(id) >= k) {
cnt++;
}
}
answer[i] = cnt;
}
return answer;
}
}
'알고리즘 > 알고리즘문풀' 카테고리의 다른 글
2022 KAKAO BLIND RECRUITMENT - 양궁대회 (JAVA) (0) | 2022.06.15 |
---|---|
2022 KAKAO BLIND RECRUITMENT - 주차 요금 계산 (JAVA) (0) | 2022.06.15 |
2021 KAKAO BLIND RECRUITMENT - 매출 하락 최소화 (JAVA) (0) | 2022.06.09 |
BOJ - 트리의 지름 1167번 (JAVA) (0) | 2022.06.08 |
2021 KAKAO BLIND RECRUITMENT - 합승 택시 요금 (JAVA) (0) | 2022.06.02 |