본문 바로가기
알고리즘/프로그래머스

[프로그래머스 / 신고 결과 받기 / JAVA]

by KDW999 2023. 2. 16.

https://school.programmers.co.kr/learn/courses/30/lessons/92334

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

다른 사람 풀이

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;
	        
	    }
}

댓글