알고리즘/프로그래머스 Level1

[프로그래머스,자바] Level1: 신고 결과 받기

류창 2022. 1. 18. 21:04

 

문제분석

 

문제목표:   신고 건수를 처리하여,  신고한사람에게 몇건의 처리 결과 메일을 보내야하는지 구하시오.

 

 

제일 첫번째로 해야할 일은, K번 신고당한 사람이 누구인지를 알아야합니다.

 

그래야지, 신고한 사람에게 처리결과 메일을 보낼수 있게되니깐요.

 

K번 신고당한 사람이 누구인지 만 찾으면 안됩니다. 

그 이유는, 저희 목표가 신고당한 사람을 신고한 사람을 찾아 메일을 보내는게 목표입니다. 

 

따라서, 신고당한 사람마다 하나의 신고한사람의 리스트를 가져야할 필요가있습니다.

->사람: 신고한 리스트 = 1: 1

 

즉, Map을 사용할 필요가있습니다. 

Key : User  Value: 유저를 신고한 사람들

 

 

두번째로 해야할 일은, 신고를 처리해야합니다.

 

신고리스트 report[]를 돌리면서,  신고자와, 신고당한자를 문자열정리를 한뒤에,

Map을 갱신해 주셔야합니다.

 

여기서 갱신할때  한 신고자가 같은 유저를 여러번 신고할수없기에, 조건문을 하나 추가해주서야합니다.

 

 

 

세번째로 해야할 일은, K번 신고당한 사람을 찾은뒤 신고한 사람에게 메일을 보내야합니다.

 

모든 map을 돈뒤, K번 신고당한사람을 조사한뒤, 신고한 사람에게 메일 카운트를 1 증가시킵니다.

 

필자는 새로운 mail_map을 생성하여, Key : user Value: count 로 저장을했습니다.

 

 

마지막으로, 입력받은 id_list 순서대로 보낼 메일 카운트를 출력하면 됩니다.

 

 

문제풀이

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
import java.util.*;
class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
      
        Map<String,List<String>> map= new HashMap<>();
        Map<String,Integer> mail_map = new HashMap<>();
        // 모든 유저에 대해 신고자리스트를 생성
        // Key: 유저, Value: 유저를 신고한 사람들
        for(String user: id_list){
            List<String> list = new LinkedList<>();
            map.put(user,list);         
            mail_map.put(user,0);    
        }      
        // 신고자: attacker 신고당한자 : defender
        // 신고당한 건수를 처리함       
        for(String temp: report){
            String[] arr=temp.split(" ");
            String attacker=arr[0];
            String defender=arr[1];           
            List<String> list =map.get(defender);
            //중복신고를 막음
            if(list.contains(attacker)){
                continue;
            }
            list.add(attacker);
            map.put(defender,list);        
        }                      
        // K번 신고당한 사람을 찾고, 신고한 사람들에게 Count증가
        for(String data: map.keySet()){
            List<String> list =map.get(data);          
            if(list.size()>=k){                
                for(String user: list){
                    int count =mail_map.get(user)+1;
                    mail_map.put(user,count);          
                }
            }
        }
          int i=0;
          int[] answer = new int[id_list.length];
          for(String data: id_list){
              answer[i]= mail_map.get(data);
              i++;
          }        
        return answer;
    }
}
cs