728x90
728x90
문제링크
문제풀이
👨🏻💻 핵심 스킬 👨🏻💻
Set(집합)
신고 결과 받기 문제는 유저들이 신고를 하는 정보를 확인하고 신고를 당한 횟수가 k 이상일 경우 정지를 주게 되는데, 그 때 정지를 받은 유저를 신고한 유저에게 알람을 준다면 알람을 받을 횟수를 확인하는 문제이다. 이 때 한 유저가 동일한 사람을 중복으로 신고하면 한번으로 처리를 해야한다. 이 조건을 만족시키기 위하여 나는 집합을 사용하여 구현하였다. 집합은 데이터를 중복없이 한개씩만 가지고 있는 자료구조이다.
신고하는 리포트의 개수가 최대 200000개 이므로, 모든 리포트를 돌아보며 구현을 하여도 전혀 문제가 되지 않다고 판단하였다.
Map을 사용하여 key값은 신고를 당한 user 그에대한 value값은 신고를 한 유저들의 집합으로 놓고 리포트를 모두 돌며 집합에 넣어주었다. 그리고 출력을 위하여 key값을 user value값을 그 유저가 신고 결과 메일을 받을 횟수로 map을 지정하여 리포트 결과를 받도록 구현하여 문제를 해결 하였다.
구현코드
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
public class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
Map<String, HashSet<String>> reportMemberList = new HashMap<>();
Map<String, Integer> getMailCount = new HashMap<>();
for(String id : id_list){
getMailCount.put(id,0);
reportMemberList.put(id,new HashSet<>());
}
for(String rep : report){
String[] checkReport = rep.split(" ");
reportMemberList.get(checkReport[1]).add(checkReport[0]);
}
for(String key : reportMemberList.keySet()){
HashSet<String> reporters = reportMemberList.get(key);
if(reporters.size() >= k){
for(String reporter : reporters){
Integer getMail = getMailCount.get(reporter);
getMailCount.put(reporter,getMail+1);
}
}
}
int[] answer = new int[id_list.length];
for(int i = 0; i < answer.length; i++){
answer[i] = getMailCount.get(id_list[i]);
}
return answer;
}
}
시간복잡도
시간복잡도는 리포트의 개수 만큼이 된다. O(리포트의 개수)
잘못된 지식이나 궁금한 내용이 있을 경우 편하게 댓글 남겨주시면 감사하겠습니다 :)
728x90
728x90
'CodingTest > Programmers' 카테고리의 다른 글
[카카오] k진수에서 소수 개수 구하기 (java) (0) | 2022.01.22 |
---|---|
[카카오] 주차 요금 계산 (java) (0) | 2022.01.20 |
[카카오] 단체사진찍기 (java) (0) | 2022.01.16 |
[카카오] 오픈채팅방 (java) (0) | 2022.01.15 |
[카카오] 카카오 프렌즈 컬러링북 (java) (0) | 2022.01.02 |