https://programmers.co.kr/learn/courses/30/lessons/92334
[문제]
[풀이]
신고기준 횟수k 를 넘어 신고를 당한사람을 블랙처리하고 그 결과를 신고한 사람에게 배열형태로 알려주는 문제이다.
우선 Map를 사용함으로써 <신고당한사람, 신고한사람들> 의 형태로 상황을 유지시킨다.
같은사람이 여러번 신고한 경우를 필터링하기위해 key를 신고당한사람, value를 HashSet으로 함으로써 중복을 기본적으로 걸러낸다.
HashMap은 기본적으로 데이터가 들어간 순서대로 entry가 돌지 않기때문에 신고한 사람 순서대로 결과를 반환하기위해서 LinkedHashMap을 사용하여 반환값을 설정해주는 response 를 따로 만든다.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
import java.util.*;
import java.io.*;
import java.util.stream.Collector;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] id_list = {"con", "ryan"};
String[] report = {"ryan con", "ryan con", "ryan con", "ryan con"};
int k = 3;
Solution solution = new Solution();
int[] answer = solution.solution(id_list, report, k);
System.out.println(Arrays.toString(answer));
}
}
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = {};
Board board = new Board(id_list, k);
board.update(report);
return board.getResponse();
}
static class Board {
private int criteria;
// key: userName, value:subjects
private HashMap<String,HashSet<String>> state = new HashMap<>();
//key: subject, value:response
private Map<String,Integer> response = new LinkedHashMap<>();
public Board(String[] id_list,int criteria) {
this.criteria = criteria;
for (String id : id_list) {
// 같은사람이 여러번 신고한 것을 제거하기위해 HashSet 을 사용
state.put(id,new HashSet<>());
response.put(id,0);
}
}
public void update(String[] report){
for (String s : report) {
// 신고자, 신고당한사람을 공백으로 분리시킨 후 상태맵에 기록
String[] log = s.split(" "); //log[0]:subject, log[1]:userName
state.get(log[1]).add(log[0]);
}
state.values().stream().filter(reportedSet->reportedSet.size()>=criteria) // 기준치 이상을 필터링
.forEach(reportedSet->reportedSet.forEach(name->response.replace(name,response.get(name)+1)));
}
public int[] getResponse(){
return response.values().stream().mapToInt(Integer::valueOf).toArray();
}
}
}
|
cs |
'알고리즘,PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [Level2] 주차 요금 계산JAVA (0) | 2022.02.05 |
---|---|
[프로그래머스] [Level2] k진수에서 소수 개수 구하기JAVA (0) | 2022.02.04 |
[프로그래머스] [Level2] 더 맵게 JAVA (0) | 2022.01.12 |
[프로그래머스] [Level3] 등굣길 JAVA (0) | 2021.11.27 |
[프로그래머스] [Level2] 거리두기 확인하기 JAVA (0) | 2021.11.17 |