set을 쓸 생각을 미처 하지 못하였다.
대략적인 흐름은 이러하다.
1. 신고한 자가 누구를 신고하냐를 set을 통해 저장한다.
2. 신고받은 자가 일정 회수 이상인것만 남겨두고 set에 있는 정보를 지운다.
3. set 에 있는 정보만 구하면 그것이 곧 답니다.
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
|
package algorithm.programmers.level1;
import java.util.*;
//신고 결과 받기
public class AbusingReport {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
Map<String, Set<String>> reportMap = new HashMap<>();
Map<String, Integer> memberMap = new HashMap<>();
//초기화를 위한 코드
for(String id : id_list){
memberMap.put(id,0);
reportMap.put(id,new HashSet<String>());
}
//신고된 사람들
for(String reportLog :report){
//신고 한건의 기록
String[] memberHistory = reportLog.split(" ");
//신고한 사람
String reporter = memberHistory[0];
//신고받은 사람
String abuser = memberHistory[1];
//중복이 되지 않도록 신고 받은 사람을 추가
if(reportMap.get(reporter).add(abuser)){ //add 를 해서 중복이 아니면 true 반환한다.
//신고받은 회원의 신고 수 +1
memberMap.put(reporter,memberMap.get(reporter)+1);
}
}
//신고한 사람
for(String reportLog : report){
String[] memberHistory = reportLog.split(" ");
String reporter = memberHistory[0];
String abuser = memberHistory[1];
//정지당하지 않은 사람은 제거, 즉 정지당한 사람만 남겨둔다.
if(memberMap.get(abuser) < k){
reportMap.get(reporter).remove(abuser);
}
}
for (int i = 0; i < id_list.length; i++) {
//answer[i] 와 reportMap.get(id_list[i]) 의 순서는 같다
//즉, reportMap.get(id_list[i]) 의 크기만 알면 된다.
answer[i] = reportMap.get(id_list[i]).size();
}
return answer;
}
}
|
cs |
참고
https://devdange.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%8B%A0%EA%B3%A0-%EA%B2%B0%EA%B3%BC-%EB%B0%9B%EA%B8%B0-for-Java-HashMap-%EB%A5%BC-%EC%A0%81%EC%9A%A9%ED%95%9C-%ED%92%80%EC%9D%B4a
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 숫자 문자열과 영단어(JAVA) (0) | 2022.03.03 |
---|---|
[프로그래머스] 로또의 최고 순위와 최저 순위(JAVA) (0) | 2022.02.21 |
더 맵게 (0) | 2021.01.21 |
주식 가격 (0) | 2021.01.07 |
위장 (0) | 2021.01.06 |