https://programmers.co.kr/learn/courses/30/lessons/92334
풀이
풀이에 필요한 Map 정의 및 초기화
- key는 유저아이디, value는 key를 신고한 유저의 아이디의 Set을 가진 Map
- 동일한 유저에 대한 신고횟수는 1회로 처리하기 때문에 중복을 없애기 위해 Set을 Value로 함
- key는 유저아이디, value는 임의의 인덱스를 가진 Map을 정의
int[] answer = new int[id_list.length];
Map<String, HashSet<String>> map = new HashMap<>();
Map<String, Integer> idxMap = new HashMap<>();
Map 초기화
for (int i = 0; i < id_list.length; i++) {
String name = id_list[i];
map.put(name, new HashSet<>());
idxMap.put(name, i);
}
신고 기록
"신고자 Id 신고한 Id"로 입력이 주어지기 때문에 split()함수를 이용해 from과 to를 구분
신고한 Id에 대해 누가 신고했는지 Map에 저장
for (String s : report) {
String[] str = s.split(" ");
String from = str[0];
String to = str[1];
map.get(to).add(from);
}
이용 정지 메일 발송
이용이 정지된 유저에 대해 해당 유저를 신고한 Id에 메일이 몇번 전송되는지 파악
map에는 해당 유저를 신고한 Id Set이 저장되어 있음
map을 순회하여 Set마다 사이즈가 2이상인지 확인
- 2이상이라면 Set(해당 유저를 신고한 ID)에게 메일을 발송
- idxMap에 맞게 끔, 신고한 Id에 대해 누적값을 1씩 증가
for (int i = 0; i < id_list.length; i++) {
HashSet<String> send = map.get(id_list[i]);
if (send.size() >= k) {
for (String name : send) {
answer[idxMap.get(name)]++;
}
}
}
전체 코드
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
Map<String, HashSet<String>> map = new HashMap<>();
Map<String, Integer> idxMap = new HashMap<>();
for (int i = 0; i < id_list.length; i++) {
String name = id_list[i];
map.put(name, new HashSet<>());
idxMap.put(name, i);
}
for (String s : report) {
String[] str = s.split(" ");
String from = str[0];
String to = str[1];
map.get(to).add(from);
}
for (int i = 0; i < id_list.length; i++) {
HashSet<String> send = map.get(id_list[i]);
if (send.size() >= k) {
for (String name : send) {
answer[idxMap.get(name)]++;
}
}
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
Programmers - 양과 늑대(Java) (0) | 2022.01.24 |
---|---|
Programmers - k진수에서 소수 개수 구하기(Java) (1) | 2022.01.21 |
Programmers - 수식 최대화(Java) (0) | 2022.01.17 |
BOJ 8972 - 미친 아두이누(Java) (0) | 2022.01.14 |
BOJ 23289 - 온풍기 안녕(Java) (0) | 2022.01.12 |
댓글