[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 |
댓글