매일 조금씩

프로그래머스 level1 : 신고 결과 받기 - Java 본문

알고리즘

프로그래머스 level1 : 신고 결과 받기 - Java

mezo 2023. 6. 2. 11:16
728x90
반응형

import java.util.*;
import java.util.Map.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        List<Integer> answer = new ArrayList<>();
        HashMap<String, Set<String>> reportedList = new HashMap<>();
        HashMap<String, Integer> mailed = new HashMap<>();
        
        // reportedList에 '피신고자=[신고자들]' 넣기
        for(String names: report){
            String reporter = names.split(" ")[0];
            String reported = names.split(" ")[1];
            HashSet<String> reporterList = new HashSet<>(
                reportedList.getOrDefault(reported, Collections.emptySet())
            );
            reporterList.add(reporter);
            reportedList.put(reported, reporterList);
        }
        
        // reportedList 중 value 크기가 2이상인것은 mail 보내기 - Iterator 
        // Iterator<String> mapIter = reportedList.keySet().iterator();
        // while(mapIter.hasNext()){
        //     String key = mapIter.next();
        //     if(reportedList.get(key).size() >= k){
        //         Iterator<String> setIter = reportedList.get(key).iterator();
        //         while(setIter.hasNext()){
        //             String value = setIter.next();
        //             mailed.put(value, mailed.getOrDefault(value, 0) + 1);
        //         }
        //     }
        // }
        
        // reportedList 중 value 크기가 2이상인것은 mail 보내기 - Entry
        for(Entry<String, Set<String>> entry : reportedList.entrySet()){
            if(entry.getValue().size() >= k){
                Iterator<String> setIter = entry.getValue().iterator();
                while(setIter.hasNext()){
                    String value = setIter.next();
                    mailed.put(value, mailed.getOrDefault(value, 0) + 1);
                }
            }
        }
        
        // id_list 의 이름 순서대로 메일받은 수 answer에 넣기
        for(String name: id_list){
            answer.add(mailed.getOrDefault(name, 0));
        }
        
        return answer.stream().mapToInt(Integer::intValue).toArray();
    }
}
728x90
반응형