[프로그래머스(Programmers)][자바(java)] (Lv1) 신고 결과 받기 <2022 KAKAO BLIND RECRUITMENT>

728x90

 

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

 

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

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

programmers.co.kr

 

문제 풀이

 

import java.util.*;

public class Solution {

	public int[] solution(String[] id_list, String[] report, int k) {

		Map<String, Set<String>> map_got_reported = new HashMap<>();
		StringTokenizer st;
		String id_reported, id_got_reported;
		for (String id : report) {
			st = new StringTokenizer(id);
			id_reported = st.nextToken();
			id_got_reported = st.nextToken();
			if (!map_got_reported.containsKey(id_got_reported))
				map_got_reported.put(id_got_reported, new HashSet<>());
			map_got_reported.get(id_got_reported).add(id_reported);
		}

		Map<String, Integer> map_mail = new LinkedHashMap<>();
		for (String id : id_list)
			map_mail.put(id, 0);
		for (Set<String> set : map_got_reported.values()) {
			if (set.size() < k)
				continue;
			for (String id : set)
				map_mail.put(id, map_mail.get(id) + 1);
		}

		return map_mail.values().stream().mapToInt(n -> n).toArray();
	}
}

 

HashMap map_got_reported 생성
 ( 신고 당한 사람 아이디를 key 로, 신고 한 사람 아이디 집합( 중복 제외 )을 value 로 함 )

LinkedHashMap map_mail 생성
 ( 전달 받은 String[] id_list 순서대로 아이디를 key 로 하고, 아이디 당 받은 메일 개수를 value 로 함 )

map_get_reported 의 values( Set<String> )을 순회하며 크기가 k 미만인 경우는 제외 하고,
 ( 한 아이디 당 신고 당한 횟수가 k 미만 ) 
   그 집합 속 아이디를 순회하며 map_mail 의 value를 카운트 함

map_mail의 값들을 순서대로 int[] 배열로 변환 후 리턴

 

 

반응형