728x90
https://programmers.co.kr/learn/courses/30/lessons/92334
문제 풀이
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[] 배열로 변환 후 리턴
반응형