매일 조금씩

프로그래머스 level1 : 신고결과받기(카카오) - JAVA 본문

알고리즘/해시

프로그래머스 level1 : 신고결과받기(카카오) - JAVA

mezo 2022. 2. 21. 19:23
728x90
반응형

HashMap, HashSet이 핵심인 문제다. 

1. 일반적

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        Map<String, HashSet<String>> reportMemberList = new HashMap<>(); // 멤버별 신고 당한 id
        Map<String, Integer> getMailCount = new HashMap<>();             // 멤버별 처리 결과 메일 받은 횟수 
        
        // 초기화
        for(String id : id_list){
            getMailCount.put(id,0);
            reportMemberList.put(id, new HashSet<>());
        }
        
        // 멤버별로 신고받은 id 저장
        for(String rep : report){
            String[] checkReport = rep.split(" ");
            reportMemberList.get(checkReport[1]).add(checkReport[0]);
        }
        
        // 신고 당한 멤버별로 for문
        for(String key : reportMemberList.keySet()){
            // 해당 멤버를 신고한 아이디들
            HashSet<String> reporters = reportMemberList.get(key);
            // 신고한 아이디들이 k개 이상이면
            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;
    }
}

 

2. 스트림으로 다시 풀어보기

728x90
반응형

'알고리즘 > 해시' 카테고리의 다른 글

[C++] 프로그래머스 : 완주하지 못한 선수  (0) 2021.02.04