본문 바로가기

코테/프로그래머스

[프로그래머스] 신고 결과 받기(JAVA)

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