[프로그래머스] 92334 신고 결과 받기

jyleever·2022년 7월 21일
0

알고리즘

목록 보기
12/26

문제

https://school.programmers.co.kr/learn/courses/30/lessons/92334

풀이

  • HashMap<String, Integer> 형식으로 유저 별 순서번호 저장 idMap
  • HashMap<String, HashSet> 유저별 자신을 신고한 유저!

유저별로 자신의 신고한 유저가 누구인지를 저장하는 HashMap을 만들자
한 유저가 동일한 유저를 여러 번 신고하는 경우를 위해 유저별 자신을 신고한 유저를 HashSet 형태로 저장!

  1. idMap에 유저에 따라 번호 저장
  2. 신고 배열을 통해 유저별 자신을 신고한 유저에 저장
  3. 유저별 자신을 신고한 유저가 k명 이상이면 그 신고한 유저에게 메일 전송

코드

import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;

/**
- HashMap<String, Integer> 형식으로 유저 별 순서번호 저장 idMap
- HashMap<String, HashSet<String>> 유저별 자신을 신고한 유저!

**유저별로 자신의 신고한 유저가 누구인지를 저장하는 HashMap을 만들자**
**한 유저가 동일한 유저를 여러 번 신고하는 경우를 위해 유저별 자신을 신고한 유저를 HashSet 형태로 저장!**

1. idMap에 유저에 따라 번호 저장
2. 신고 배열을 통해 유저별 자신을 신고한 유저에 저장
3. 유저별 자신을 신고한 유저가 k명 이상이면 그 신고한 유저에게 메일 전송
**/

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        HashMap<String, Integer> idMap = new LinkedHashMap<>(); // 유저 번호 저장
        HashMap<String, HashSet<String>> reportMap = new HashMap<>();
        // 신고당한 유저와 그 유저를 신고한 유저
        // 동일한 유저가 동일한 유저를 여러 번 신고해도 한 번으로 취급됨!
        
        // 유저 번호 저장
        for(int i=0; i<id_list.length; i++){
            idMap.put(id_list[i], i);
            reportMap.put(id_list[i], new HashSet<>());
        }
        
        // 신고 유저 저장
        for(String s : report){
            String[] str = s.split(" ");
            reportMap.get(str[1]).add(str[0]); // (신고당한 유저, 신고한 유저)
        }
        
        // k번 이상 신고당한 유저가 존재하는 경우 그 유저를 신고한 유저에게 메일 전송 횟수+1
        // HashSet 개수로 판단
        for(int i=0; i<id_list.length; i++){
            HashSet<String> reporter = reportMap.get(id_list[i]);
            if(reporter.size() >= k){
                // 신고 횟수가 k번이 넘은 사람
                for(String name : reporter){
                    answer[idMap.get(name)]++; // answer[유저번호]++;
                }
            }
        }
        
        return answer;
    }
}

0개의 댓글