본문 바로가기
CodingTest/Programmers

[Programmers] 신고 결과 받기 (카카오 2022 공채)

by 창브로 2025. 9. 8.

[문제 링크]

https://school.programmers.co.kr/learn/courses/30/lessons/92334?language=java

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

[풀이 과정]

단순 구현 문제 같아서 처음에 주석으로 내가 어떻게 해야할지 적어 놓고 하나하나 구현해 나갔습니다.

 

[코드]

import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        // 1. 일단 Map을 만들어 String신고 당한사람 : Set신고 한사람
        // 2. Map을 쭉 돌면서 value의 size가 k 이상인 사람 찾기
        // 3. id_list에 있는 애들 메일 횟수 정하게 String id : Integer 이메일 받은 횟수 -> 0으로 일단 초기화
        // 4. 2번에서 찾은 사람의 value에 있는 id에 다 +1
        // 5. answer에 순서대로 넣기
        
    
        Map<String, Set<String>> reportMap = new HashMap<>();
        
   
        Map<String, Integer> emailCount = new HashMap<>();
        
        for(String s : id_list) {
            emailCount.put(s, 0);
        }
        
    
        for(String r : report) {
            String[] s = r.split(" ");
            String sender = s[0];
            String reciver = s[1];
            
            if(reportMap.containsKey(reciver)) {
                reportMap.get(reciver).add(sender);
            } else {
                Set<String> senderSet = new HashSet<>();
                senderSet.add(sender);
                reportMap.put(reciver, senderSet);
            }
        }
        
        for(String reciver : reportMap.keySet()) {
            if(reportMap.get(reciver).size() >= k) {
                Set<String> senderSet = reportMap.get(reciver);
                
                for(String s : senderSet) {
                    emailCount.put(s, emailCount.get(s) + 1);
                }
            }
        }
        
        int[] answer = new int[id_list.length];
        
        for(int i = 0; i < id_list.length; i++) {
            String s = id_list[i];
            
            int a = emailCount.get(s);
            
            answer[i] = a;
        }
        
        return answer;
    }
}

[회고]

공채에서 낼 수 있는 문제 중 가장 쉬운 문제인 것 같습니다.

그래도 이제 이 정도는 풀 수 있어 다행입니다..

 

 

 

 

질문과 피드백은 언제나 환영입니다.

감사합니다.