본문 바로가기
카테고리 없음

[프로그래머스, java] 신고 결과 받기 문제

by 문자메일 2022. 7. 13.

회고 : 대학생 때는 C, 이후에는 파이썬으로 코테 문제 풀다가, java로 코딩 테스트 문제 처음 풀어보니 굉장히 낯설다.

맨날 파이썬에서 list, dict 편하게 쓰다가 int[], string[] 마주치니 뭔가 싶었는데 예전에 배열을 저렇게 썼었던 게 뒤늦게 기억이 났다. hashmap 반복문 돌리기 상당히 귀찮기도 함. 문법 검색해가면서 돌아가도록은 구현하였고 다른 사람 작성한 코드 보면서 공부해야 할 듯.

 

// 한 유저가 동일한 유저 신고했을 때 카운트 1회로 처리해야 함
// 특정 유저가 n번 이상 신고되었을때 그 신고한 유저에게 메일 보내야 함.

import  java.util.Arrays;
import  java.util.List;
import  java.util.ArrayList;
import  java.util.LinkedHashSet;
import  java.util.HashMap;

class Solution {
    
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = {};
        LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>(Arrays.asList(report));
        // System.out.println(linkedHashSet);
        
        HashMap<String, List<String>> reportIdList_Id = new HashMap<String, List<String>>();
        HashMap<String, Integer> reportId_reportCnt = new HashMap<String, Integer>();
        for(String i : linkedHashSet){
            //System.out.println(i);
            String[] i_r = i.split(" ");
            String id = i_r[0];
            String report_id = i_r[1];
            // System.out.println(id+ report_id);
            
            if(reportId_reportCnt.containsKey(report_id) == false){
                reportId_reportCnt.put(report_id, 1);
            }else{
                reportId_reportCnt.put(report_id, reportId_reportCnt.get(report_id) +1);
            }
            
            if(reportIdList_Id.containsKey(report_id) == false){
                List<String> arr = new ArrayList<String>();
                arr.add(id);
                reportIdList_Id.put(report_id, arr);
            }else{
                List<String> arr = reportIdList_Id.get(report_id);
                arr.add(id);
                reportIdList_Id.put(report_id, arr);
            }
               
        }
        
        List<String> list = new ArrayList<String>();
        reportId_reportCnt.forEach((key,value)->{
            if(value<k){
                list.add(key);
            }
        }
                   );
        
        for(String s : list){
            reportIdList_Id.remove(s);
        }
        
//         reportIdList_Id.forEach((key, value)->{
//             if(list.contains(key)){
                
//             }
//         });
        int[] ans = new int[id_list.length]; 
        int index = 0;
        for(String i : id_list){
            int count = 0;
            
            // reportIdList_Id.forEach((key,value)->{
            //     if(value.contains(i)) {
            //         count = count+1;
            //     }
            // });
            
            for(String key : reportIdList_Id.keySet()){
                if(reportIdList_Id.get(key).contains(i))
                    count++;
            }
            
            ans[index++]= count;
            
        }
        
        
        // System.out.println(list);
        // System.out.println(reportId_reportCnt);
        // System.out.println(reportIdList_Id);
        // System.out.println(ans);
        return ans;
    }
}

 

댓글