알고리즘/알고리즘문풀

2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기 (JAVA)

developer-ellen 2022. 6. 12. 23:47

 문제 - 2022 KAKAO BLIND RECRUITMENT 신고 결과 받기 - JAVA 풀이법

출처 

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

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

 

📝 문제해결법 

1. Hash의 자료구조를 사용해서 풀었다.

  • reportHash라는 HashMap에 Key(String) : 신고한 사람, Value(HashSet<String>) : 신고 당한 사람 형태로 저장한다.
  • count라는 HashMap에는 Key(String) : 신고당한 사람, Value(Integer) : 신고당한 횟수로 저장한다.
  • report 배열 하나씩 신고한 사람 -> 신고할 사람으로 정보를 꺼내서 혹시 신고한 사람이 이미 신고할 사람을 신고했는지 체크한 후에 신고하지 않았다면 신고 처리를 해준다.
  • 모든 신고 처리가 끝난 후 다시 reportHash와 count의 HashMap을 이용해서 유저가 신고한 사람들 중 몇 명이 게시판 이용이 정지되었는지 answer에 넣어준다.

 

 

2. 느낀점

  • 일단 처음에 HashMap을 두 개를 사용했지만, HashSet을 이용하지 않고 String 형태로 더해주는 처리하고 중복은 contains를 활용했떠니 일부 테스트케이스는 틀리고 시간이 전체적으로 높게 나왔다.
  • HashMap안에 Value에 HashSet의 자료구조가 한 번 더 이용할 수 있구나 배웠다 !

 

💻 소스코드 

// 2022 KAKAO BLIND RECRUITMENT - 신고결과받기 - Hash 이용 - 신고 결과 받기
// Hash
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;



public class Solution {

	public static void main(String[] args) {


	}
	
	public static int[] solution(String[] id_list, String[] report, int k) {
		HashMap<String, HashSet<String>> reportHash = new HashMap<String, HashSet<String>>();
        HashMap<String, Integer> count = new HashMap<String, Integer>();
        int[] answer = new int[id_list.length];
        for(String id:id_list) {
        	reportHash.put(id, new HashSet<String>());
        	count.put(id, 0);
        }
        
        for(String s:report) {
        	String[] str = s.split(" ");
     
        	if(!reportHash.get(str[0]).contains(str[1])) {
        		int cnt = count.get(str[1]);
            	count.put(str[1], cnt+1);
            	reportHash.get(str[0]).add(str[1]);
        	}
        	
        	
        }
        
        for(int i=0;i<id_list.length;i++) {
        	int cnt = 0;
        
        	for(String id:reportHash.get(id_list[i])) {
        		if(count.get(id) >= k) {
        			cnt++;
        		}
        	}
     
        	
        	answer[i] = cnt;
        }

		
		
        return answer;
    }

}