https://school.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];
HashMap<String,Integer> idxMap = new HashMap<>(); // (1)
HashMap<String,HashSet<String>> map = new HashMap<>(); //(2)
(1) 이름-인덱스로 맵핑하기 위해 정의.
(2) 신고당한사람, 신고한 사람 으로 맵핑하기 위해 정의. 위해서 말했듯,
동일한 유저에 대한 신고횟수는 1회로 처리하기 때문에 중복을 없애기 위해 HashSet을 Value로 함
Map 초기화
for(int i=0;i<id_list.length;i++){
idxMap.put(id_list[i],i);
map.put(id_list[i], new HashSet<>());
}
신고 기록
for(String r : report){
String[] str = r.split(" ");
String sender = str[0]; // 신고한 사람
String receiver = str[1]; // 신고 당한 사람
map.get(receiver).add(sender);
}
신고한 사람을 sender, 신고 당한 사람을 receiver로 정의.
신고 당한 사람의 value에 누가 신고했는지 Map에 저장
신고당한사람 = [신고한 사람]
이용 정지 메일 발송
이용이 정지된 유저에 대해 해당 유저를 신고한 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];
HashMap<String,Integer> idxMap = new HashMap<>();
HashMap<String,HashSet<String>> map = new HashMap<>(); //신고받은사람,신고한사람
for(int i=0;i<id_list.length;i++){
idxMap.put(id_list[i],i);
map.put(id_list[i], new HashSet<>());
}
for(String r : report){
String[] str = r.split(" ");
String sender = str[0];
String receiver = str[1];
map.get(receiver).add(sender);
}
System.out.println(map);
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;
}
}
'코딩테스트 > 문제풀이 팁' 카테고리의 다른 글
[공원산책] 좌표표현 (0) | 2024.03.24 |
---|---|
[그리디] Kakao - 두 큐 합 같게 만들기 (0) | 2024.03.18 |
[유클리드 호제법] 숫자 카드 나누기 (0) | 2024.03.17 |
int형 2차원 배열 복합정렬조건 (0) | 2024.03.16 |
[Kakao] 가장 많이 받은 선물 (0) | 2024.03.15 |