프로그래머스 코딩 테스트 문제/lv1

프로래머스 Lv1 신고 결과 받기 문제

lys4321 2026. 2. 24. 12:36
  • 프로래머스 Lv1 신고 결과 받기 문제
    • 해당 문제의 난이도 상승 원인
      • 실행 시간 제한이 10초 이내로 설정되어 불필요한 반복등을 배제해야함
      • 동일 유저에 대한 중복 신고를 최대 1로 제한해야 함
    • 해당 문제를 해결한 방법
      • 'Set'을 사용하여 중복 요청들어 올 때 추가로 카운팅하지 않도록 제한
      • 한 사람을 Map 요소 하나도 두어 그 사람이 신고했던 사람, 그 사람을 신고했던 사람들의 정보들을 저장
    • 문제의 핵심
      • 불필요한 반복을 피하고 딱 필요한 데이터만 사용해야 함
    • 이 문제의 목적
      • 불필요한 동작 등을 고려하여 코드를 짜도록 학습
import java.util.*;

class ReceiveReportResults {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = {};

        Map<String, Set<String>> reportHis = new HashMap<>(); // 이력 저장소
        Map<String, Integer> cntMap = new HashMap<>(); // 카운팅 저장소

        for(String id : id_list){
            reportHis.put(id, new HashSet<>());
        }

        for(String r : report){
            String[] sArr = r.split(" ");
            String cause = sArr[0];
            String effect = sArr[1];

            if(reportHis.get(cause).add(effect)){
                cntMap.put(effect, cntMap.getOrDefault(effect, 0) + 1);
            }
        }

        List<Integer> answerList = new ArrayList<>();
        for(String id : id_list){
            int f_report_cnt = 0;
            Set<String> resportHisSet = reportHis.get(id);
            if(resportHisSet != null){
                for(String target : resportHisSet){
                    if(cntMap.getOrDefault(target, 0) >= k){
                        f_report_cnt++;
                    }
                }
                answerList.add(f_report_cnt);
            }
        }


        answer = answerList.stream().mapToInt(Integer::intValue).toArray();

        return answer;
    }

    public static void main(String[] args) {
        String[] id_list = {"muzi", "frodo", "apeach", "neo"};
        String[] report = {"muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"};
        int k = 2;

        ReceiveReportResults rrr = new ReceiveReportResults();

        System.out.println("결과 : " + Arrays.toString(rrr.solution(id_list, report, k)));
    }
}