2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기

Updated:

Java

신고 결과 받기

문제

접근 방법

  1. Map<String, Set>으로 신고자 - 신고당한 사람 을 담는다
  2. Map<String, Int>로 사람 - 신고당한 횟수 정의
    1. 단, 해당 1번 map의 contains 체크를 통해 이미 신고당했는지 확인
  3. 2번 map에서 k번 이상 신고당한 사람의 list를 구한다.
  4. 1번 map과 list를 비교하여 contains로 각 사람에 대하여 신고 처리 결과 횟수를 센다.

코드

class Solution {
	static public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];


        Map<String, Set<String>> reportMap = new HashMap<>();
        Map<String, Integer> reportCnt = new HashMap<>();
        int IDlen = id_list.length;
        for(int i = 0; i < IDlen; i++) {
        	reportMap.put(id_list[i], new HashSet<String>());
        	reportCnt.put(id_list[i], 0);
        }

        int r_len = report.length;
        String[] sp;

        for(int i = 0; i < r_len; i++) {
        	sp = report[i].split(" ");
        	// 중복 신고 확인
        	if(!reportMap.get(sp[0]).contains(sp[1])) {
        		// 신고 추가
        		reportMap.get(sp[0]).add(sp[1]);
        		// 신고당한 사람의 횟수를 증가한다.
        		reportCnt.replace(sp[1], reportCnt.get(sp[1]) + 1);
        	}
        }

        // 정지 당한 리스트
        List<String> banned = new ArrayList<>();

        for(int i = 0; i < IDlen; i++) {
        	if(reportCnt.get(id_list[i]) >= k) {
        		banned.add(id_list[i]);
        	}
        }

        // 처리 결과 메일의 횟수
        String curU;
        for(int i = 0; i < IDlen; i++) {
        	curU = id_list[i];

        	for(String ban : banned) {
        		if(reportMap.get(curU).contains(ban)) {
        			answer[i]++;
        		}
        	}
        }

        return answer;
    }


    public static void main(String[] args) {
    	String[] sList = new String[] { "con", "ryan" };
    	String[] rList = new String[] { "ryan con", "ryan con", "ryan con", "ryan con" };
    	int k = 3;
    	System.out.println(Arrays.toString(solution(sList, rList, k)));
	}
}

총평

후기

개선할 점