관리 메뉴

bright jazz music

신고 결과 받기 본문

Algorithm

신고 결과 받기

bright jazz music 2022. 4. 19. 08:48
//reporter: 신고한 사람
//singo: 신고 당한 사람


import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer; 
//	StringTokenizer는 문자열을 구분자(delimeter)로 분리한다.
//	public StringTokenizer(String str);
//	delim을 지정해 주지 않는 경우 \n, \t 등의 공백으로 잘라낸다.

//	public StringTokenizer(String str, String delim);
//	지정된 구분자 "delim"으로 잘라냄

//	public StringTokenizer(String str, String delim, boolean returnDelims);
//	returnDelims 값이 true인 경우, delim까지 토큰으로 포함한다.
//	false인 경우 포함하지 않는다.

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
            
        int[] answer = new int[id_list.length];
        HashMap<String, Set<String>> reporterArr = new HashMap<String, Set<String>>();
        HashMap<String, Integer> singoArr = new HashMap<String, Integer>();
        
        //초기화
        for(String id : id_list) {
            singoArr.put(id, 0);
            reporterArr.put(id, new HashSet<String>());
        }
        
        //신고된 사람들
        for(String cur : report) {
            StringTokenizer st = new StringTokenizer(cur, " ");
            String reporter = st.nextToken();
            String singo = st.nextToken();
            if(reporterArr.get(reporter).add(singo)) {
                singoArr.put(singo, singoArr.get(singo) + 1);
            }
        }
        
        //신고한 사람
        for(String cur : report) {
            StringTokenizer st = new StringTokenizer(cur, " ");
            String reporter = st.nextToken();
            String singo = st.nextToken();
            
            //본인이 신고한 사람의 신고 당한 횟수가 k이상일 경우에만 남기기
            if(singoArr.get(singo) < k)
                reporterArr.get(reporter).remove(singo);
        }

        for(int i = 0; i < id_list.length; i++) {
            answer[i] = reporterArr.get(id_list[i]).size();
        }
        
        return answer;
    }
}


//id_list는 이용자의 id가 담긴 문자열 배열
//report는 각 이용자가 신고한 이용자의 id가 담긴 문자열 배열,
// 정지 기준이 되는 신고 횟수 k


// "각 유저별로 처리 결과 메일을 받은 횟수"를 배열에 담아 return




////////////////////////////////////////////////////////















import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        List<String> list = Arrays.stream(report).distinct().collect(Collectors.toList());
        HashMap<String, Integer> count = new HashMap<>();
        for (String s : list) {
            String target = s.split(" ")[1];
            count.put(target, count.getOrDefault(target, 0) + 1);
        }

        return Arrays.stream(id_list).map(_user -> {
            final String user = _user;
            List<String> reportList = list.stream().filter(s -> s.startsWith(user + " ")).collect(Collectors.toList());
            return reportList.stream().filter(s -> count.getOrDefault(s.split(" ")[1], 0) >= k).count();
        }).mapToInt(Long::intValue).toArray();
    }
}




////////////////////////////////////////////////////////////









import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        ArrayList<User> users = new ArrayList<>();
        HashMap<String,Integer> suspendedList = new HashMap<>(); //<이름>
        HashMap<String,Integer> idIdx = new HashMap<String,Integer>(); // <이름, 해당 이름의 User 클래스 idx>
        int idx = 0;

        for(String name : id_list) {
            idIdx.put(name,idx++);
            users.add(new User(name));
        }

        for(String re : report){
            String[] str = re.split(" ");
            //suspendedCount.put(str[0], suspendedCount.getOrDefault(str[0],0)+1);
            users.get( idIdx.get(str[0])).reportList.add(str[1]);
            users.get( idIdx.get(str[1])).reportedList.add(str[0]);
        }

        for(User user : users){
            if(user.reportedList.size() >= k)
                suspendedList.put(user.name,1);
        }

         for(User user : users){
             for(String nameReport : user.reportList){
                 if(suspendedList.get(nameReport) != null){
                     answer[idIdx.get(user.name)]++;
                 }

             }
        }




        return answer;
    }
}

class User{
    String name;
    HashSet<String> reportList;
    HashSet<String> reportedList;
    public User(String name){
        this.name = name;
        reportList = new HashSet<>();
        reportedList = new HashSet<>();
    }
}
Comments