문제
문제 풀이
유저가 신고를 한 아이디를 가지고 몇 번 신고를 했는지 체크하는 문제이다.
한 유저가 한 아이디를 여러번 신고하는 문제를 set 자료구조를 사용하여 처리 하였으며, 그렇게 모인 신고리스트를 map 자료구조로 카운팅하였음.
카운팅 된 수가 k가 될 때 ban이 되게 하였고 그 ban이 된 리스트를 가지고 유저가 신고한 사람이 밴을 당하였는지 다시 카운팅하여 결과 배열에 담았다.
나의 답안
public static int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
Map<String, Set<String>> reportMap = new HashMap<>();
ArrayList<String> banList = new ArrayList<>();
Map<String, Integer> ban = new HashMap<>();
for (String id : report) {
Set<String> set = new HashSet<>();
String[] s = id.split(" ");
if (reportMap.containsKey(s[0])) {
reportMap.get(s[0]).add(s[1]);
} else {
set.add(s[1]);
reportMap.put(s[0], set);
}
}
for (String key : reportMap.keySet()) {
Set<String> strings = reportMap.get(key);
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
ban.put(s, ban.getOrDefault(s, 0) + 1);
if (ban.get(s) == k) banList.add(s);
}
}
for (int i = 0; i < id_list.length; i++) {
int count = 0;
if (reportMap.containsKey(id_list[i])) {
Set<String> strings = reportMap.get(id_list[i]);
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
for (String baned : banList) {
if (s.equals(baned)) count++;
}
}
}
answer[i] = count;
}
return answer;
}
다른 답안
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
// key: 신고당한놈, value: 몇명한테 당했는지
Map<String, Set<String>> map = new HashMap<>();
for (String rep : report) {
String[] arr = rep.split(" ");
Set<String> set = map.getOrDefault(arr[1], new HashSet<>());
set.add(arr[0]);
map.put(arr[1], set);
}
// key: 알림받을 놈, value: 몇번 알림받을지
Map<String, Integer> countMap = new LinkedHashMap<>();
for (String id : id_list) {
countMap.put(id, 0);
}
for (Map.Entry<String, Set<String>> entry : map.entrySet()) {
if (entry.getValue().size() >= k) { // 정지당할놈
for (String value : entry.getValue()) {
countMap.put(value, countMap.getOrDefault(value, 0) + 1);
}
}
}
return countMap.values().stream().mapToInt(Integer::intValue).toArray();
}
}
'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글
공원 산책 (0) | 2023.03.30 |
---|---|
바탕화면 정리 (0) | 2023.03.29 |
개인정보 수집 유효기간 (0) | 2023.03.29 |
대충 만든 자판 (0) | 2023.03.28 |
둘만의 암호 (0) | 2023.03.27 |