프로그래머스, 신고 결과 받기

LeeKyoungChang·2022년 9월 21일
0

Algorithm

목록 보기
199/203
post-thumbnail

📚 1. 신고 결과 받기

📖 A. 문제 설명

신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.

  • 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
    • 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
    • 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
  • k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
    • 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.

문제 예시는 신고 결과 받기 를 참고하기

 

 

📖 B. 나는 어떻게 풀었는가?

Python에서는 딕셔너리를 사용하면 된다.
그렇다면 Java에서는? Map을 사용하면 된다.

dic_list = {id : [] for id in id_list}

와 같은 형식을 사용하여, id(key 인덱스)에 해당하는 [] list에 user가 신고한 ID를 넣는다.

이를 사용할 시 쉽게 구현할 수 있다.

 

✔ 그러면 Java 에서는?

{"abs":212, "cde":3213, "res":4141}; 일 때
찾는 문자열 {"abs", "res"}

"cde"의 인덱스를 알고 싶을 때

HashMap<String, Integer> indexHashMap = new HashMap<>();
HashMap<String, HashSet<String>> map = new HashMap<>();


반복문을 돌리면서 index를 저장한다.
for(index 찾는 문자열1까지)
- indexHashMap.put(찾는문자열1[index], index);
- map.put(찾는문자열[index], new HashSet<>());

  • 미리 찾는 값의 인덱스를 HashMap에 저장한다.
  • 또 다른 HashMap에서는 찾는 HashSetvalue에 넣어준다.

- cde
map.get(찾는 문자열2).add(찾는 문자열1);

for(index 찾는 문자열1 까지)
- HashSet<String> = map.get(index(i));
- 만약 key크기 보다 크다면
- 반복문을 돌려서 횟수를 증가시킨다.

 

 

📖 C. 소스

import java.util.*;  
  
  
public class pg92334 {  
    // 인덱스 저장 HashMap    static HashMap<String, Integer> idxMap;  
  
    // value에 중복 제거하는 HashMap    static HashMap<String, HashSet<String>> map;  
  
    static int[] solution(String[] id_list, String[] report, int k) {  
        int[] answer = new int[id_list.length];  
        map = new HashMap<>();  
        idxMap = new HashMap<>();  
  
        // map에 삽입한다.  
        for(int i =0 ; i< id_list.length; i++){  
            idxMap.put(id_list[i], i);  
            map.put(id_list[i], new HashSet<>());  
        }  
  
        for (String s : report) {  
            String[] rs = s.split(" ");  
            map.get(rs[1]).add(rs[0]);  
        }  
  
        for(int i= 0; i< id_list.length;i++){  
            HashSet<String> s = map.get(id_list[i]);  
  
            if(s.size() >= k){  
                for (String s1 : s) {  
                    answer[idxMap.get(s1)] +=1;  
                }  
            }  
        }  
  
        return answer;  
    }  
  
    public static void main(String[] args) {  
        String[] id_list = {"muzi", "frodo", "apeach", "neo"};  
        String[] report = {"muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"};  
        int k = 2;  
        solution(id_list, report, k);  
    }  
}

 

 


profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글