[프로그래머스Level1]신고 결과 받기

Jcy·2022년 9월 14일
0

알고리즘

목록 보기
8/8

간단한 문제 설명..

(출처 : https://school.programmers.co.kr/learn/courses/30/lessons/92334)

어려웠던 점

- 문자열을 요리조리 주무르기가 어려웠다. 공백을 기준으로 분리한다던가(split) 하는 함수들이 낯설었다. - HashMap을 이용해서 풀었는데 중복제거를 못했었다.
- 질문을 참고해서 처음에 주어진 report 문자열을 HashSet에 넣고 돌려서 중복제거를 해결했다.
import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = {};
        HashMap<String, Integer> cntMap = new HashMap<>();
        HashMap<String, String> reportMap = new HashMap<>();
        
        HashSet<String> reportSet = new HashSet<>();
        for(String s : report)reportSet.add(s);
        report = reportSet.toArray(new String[0]);
        
        for(int i=0;i<report.length;i++){
            String[] tmp = report[i].split(" ");
            if(cntMap.containsKey(tmp[1])){ //있으면 ++
                int reportCnt = cntMap.get(tmp[1]);
                cntMap.put(tmp[1],reportCnt+1);
            }else{ //없으면 1
                cntMap.put(tmp[1], 1);
            }
        }

        for(int i=0;i<report.length;i++){
            String[] tmp = report[i].split(" ");
            if(cntMap.containsKey(tmp[1]) && cntMap.get(tmp[1]) >= k){ //있는데 K 넘으면
                if(reportMap.containsKey(tmp[0])){
                    String reportedName = reportMap.get(tmp[0]);
                    reportMap.put(tmp[0],reportedName+" "+tmp[1]);
                }else{
                    reportMap.put(tmp[0],tmp[1]);
                }
            }
        }

        answer = new int[id_list.length];
        for(int i=0;i< id_list.length;i++){
            if(reportMap.containsKey(id_list[i])){
                String nameCnt = reportMap.get(id_list[i]);
                answer[i] = nameCnt.split(" ").length;
            }else{
                answer[i] = 0;
            }
        }
        return answer;
    }
}
profile
꾸준하게라도 써보겠읍니다..

0개의 댓글

관련 채용 정보