본문 바로가기
PROGRAMMERS

신고 결과 받기

by 김ㅋㅋㅋ 2022. 5. 20.

[JAVA] 신고 결과받기 풀이 소스


신고 결과 받기 풀이 소스입니다.

 

풀이 방법은 코드 내 주석으로 넣어놨습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.Arrays;
import java.util.HashMap;
import java.util.stream.Collectors;
 
public class receiveReportResult {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(solution(new String[] { "muzi""frodo""apeach""neo" },
                new String[] { "muzi frodo""apeach frodo""frodo neo""muzi neo""apeach muzi" }, 2))); // 답:[2,1,1,0]
        System.out.println(Arrays.toString(solution(new String[] { "con""ryan" },
                new String[] { "ryan con""ryan con""ryan con""ryan con" }, 3))); // 답:[0,0]
    }
 
    public static int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        // 특정아이디가 전달받는 메일 수가 answer의 몇 번째에 들어가는지 매칭용 맵
        HashMap<String, Integer> idMap = new HashMap<String, Integer>();
        for (int idx = 0; idx < id_list.length; idx++) {
            idMap.put(id_list[idx], idx);
        }
        
        // 신고 리스트 -> 중복 신고 제거 -> 그룹핑 (신고받은 id, 신고한 아이디 리스트)
        // list size가 k 이상인 경우 신고한 아이디들 answer[]의 각 위치에 +1씩 
        Arrays.stream(report).distinct()
                .collect(
                    Collectors.groupingBy(
                        x -> x.toString().split(" ")[1],
                        Collectors.mapping(y -> y.toString().split(" ")[0], Collectors.toList())
                    )
                ).forEach((key, list) -> {
                    if (list.size() >= k) {
                        for (String str : list) {
                            answer[idMap.get(str)] += 1;
                        }
                    }
                });
        return answer;
    }
}
cs

'PROGRAMMERS' 카테고리의 다른 글

튜플  (0) 2021.07.15
예상 대진표  (0) 2021.05.05
행렬 테두리 회전하기  (0) 2021.04.30
큰 수 만들기  (0) 2021.04.23
프린터  (0) 2021.04.09

댓글