https://school.programmers.co.kr/learn/courses/30/lessons/92334
다른 사람 풀이
import java.util.*;
class Test1 {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length]; // 신고자가 메일을 받은 횟수
HashMap<String, Integer> idMap = new HashMap<>(); // id_list의 유저 순서 저장하는 Map, ex) muzi = 0, frodo = 1 ...
HashMap<String, HashSet<String>> map = new HashMap<>(); // 각 유저별 자신을 신고한 유저 Set을 저장하는 Map
for(int i=0; i<id_list.length;i++){
idMap.put(id_list[i],i); // 유저 순서 저장
map.put(id_list[i], new HashSet<>()); // 유저에 Set 저장
}
for(String r : report){
String[] str = r.split(" "); // report요소 쪼개기 0 : 신고자, 1 : 피신고자
map.get(str[1]).add(str[0]); // map의 유저(피신고자)에 저장되어 있는 Set에 유저(신고자) 저장
}
for(int i=0; i<id_list.length;i++){
HashSet<String> set = map.get(id_list[i]); // map.get으로 유저(피신고자)에 저장된 Set을 새로 선언한 set에 저장
if(set.size() >= k){ // 자신을 신고한 유저가 k이상이면
for(String userId : set){ // 신고자들을 담은 set
// 유저별 순서를 저장해둔 idMap
answer[idMap.get(userId)]++; // answer[idMap.get("muzi")] → answer[0]에 +1, 신고자에게 메일 발송 + 1
}
}
}
return answer;
}
}
틀린 풀이
한 명이 같은 사람을 누적 신고해도 1회로 치는 방법이 떠오르지 않았는데 다른 사람들은 대부분 Set을 사용하였더라
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
HashMap<String, Integer> user_report = new HashMap<String, Integer>();
Map<String, Integer> user_report_repeat = new HashMap<String, Integer>();
for(int i=0; i<id_list.length; i++) user_report.put(id_list[i], 0);
for(int i=0; i<report.length; i++) {
String[] reportCheck = report[i].split(" ");
user_report.put(reportCheck[1], user_report.get(reportCheck[1])+1);
}
HashMap<String, Integer> user_count = new HashMap<String, Integer>();
List<Integer> list = new ArrayList<Integer>();
for(int i=0; i<id_list.length; i++) user_count.put(id_list[i], 0);
for(int i=0; i<id_list.length; i++) {
if(user_report.get(id_list[i]) >= k) {
for(int j=0; j<report.length; j++) {
String[] reportCheck = report[j].split(" ");
if(reportCheck[1].equals(id_list[i])) user_count.put(reportCheck[0], user_count.get(reportCheck[0])+1);
}
}
}
for(int i=0; i<id_list.length; i++) list.add(user_count.get(id_list[i]));
int[] answer = list.stream().mapToInt(i -> i).toArray();
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 로또의 최고 순위와 최저 순위 / JAVA] (0) | 2023.02.25 |
---|---|
[프로그래머스 / 카드 뭉치 / JAVA] (0) | 2023.02.22 |
[프로그래머스 / 숫자 문자열과 영단어 / JAVA] (0) | 2023.02.13 |
[프로그래머스 / 개인정보 수집 유효기간 / JAVA] (0) | 2023.02.10 |
[프로그래머스 / 둘만의 암호 / JAVA] (0) | 2023.02.07 |
댓글