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

2585 단어 algorithmalgorithm

카카오 코테 Level1의 간단한 문제다.
자료구조를 활용하는데 익숙하다면 어려움 없이 풀 수 있다.
오랜만에 자바 연습 좀 할 겸 자바로 작성했다.

좀 더 깔끔히 풀 수도 있을것 같아서,,, 다음 번에 볼때는 다른 이들의 풀이도 참고해 보기로,,,

한사람이 똑같은 사람을 여러번 신고한 것은 한번으로 치므로, Set을 사용하여 중복을 거른 것 정도를 중점적으로 작성했다.

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        
        
        HashMap<String, Integer> reported = new HashMap<>(); // 신고 한 사람이 메일 돌려받는 횟수
        HashMap<String, Set<String>> reporter = new HashMap<>(); //신고 받은 사람- 신고한사람 명단
        
        int lth = id_list.length;
        int[] answer = new int[lth];
        
        // 초기화
        for (int i = 0; i < lth; i++) {
        	reported.put(id_list[i], 0);
        	Set<String> pp = new HashSet<>();
            reporter.put(id_list[i], pp);
        }
        
        int repSz = report.length;
        
        // 신고 받은 사람 기준으로 신고한 사람 명단 만들기
        for (int i = 0; i < repSz; i++) {
        	String[] tmp = report[i].split(" ");
        	
        	// 신고한 사람 체크
        	Set<String> pp = reporter.get(tmp[1]);
        	pp.add(tmp[0]);
        	reporter.put(tmp[1], pp);
        }
        
        // 명단 기준으로 메일 되돌려 받는 횟수 카운트
        for (int i=0; i < lth; i++) {
        	Set<String> chk = reporter.get(id_list[i]);
        	if (chk.size() >= k) {
        		
        		for (String chker:chk) {
        			int repCnt = reported.get(chker);
        			reported.put(chker, repCnt+1);
        		}
        		
        	}
        }
        
        for (int i = 0; i < lth; i++) {
        	answer[i] = reported.get(id_list[i]);   
        }
              
        return answer;
    }
}

좋은 웹페이지 즐겨찾기