코진남

프로그래머스 신고! 본문

코딩테스트

프로그래머스 신고!

woojin126 2022. 3. 26. 01:38

문제 설명

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

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

다음은 전체 유저 목록이 ["muzi", "frodo", "apeach", "neo"]이고, k = 2(즉, 2번 이상 신고당하면 이용 정지)인 경우의 예시입니다.

 

import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
     int[] answer = new int[id_list.length];

        Map<String,Integer> mail_list = new HashMap<>();
        Map<String,HashSet<String>> people_list=  new HashMap<>();

        for (int i = 0 ; i < id_list.length ; i ++) {
            mail_list.put(id_list[i] , i);
            people_list.put(id_list[i] , new HashSet<>());
        }

        for (int i = 0; i < report.length; i++) {
            String[] people = report[i].split(" ");
            String good = people[0];
            String bad = people[1];

            people_list.get(bad).add(good);
        }

        for (int i = 0 ; i < id_list.length ; i ++) {
            HashSet<String> good = people_list.get(id_list[i]);

            if (good.size() >= k ) {
                for (String s : good) {
                    answer[mail_list.get(s)] ++;
                }
            }
        }


        return answer;
    }
}

 

 

첫번째 for문

1.mail_list는 신고해서 메일을 받을 사람들이 모여있는 map으로 key는 신고한사람의 이름, value는 구분하기위한 index를 준다.

2.people_list는 한사람은 한번에 한명의 유저만 신고가 가능함으로 Set알고리즘을 이용해 중복을 제거.

두번째 for문

신고한사람과 신고 당한사람의 정보를 split을 통해 분리후

신고한사람 , 당한사람으로 나눈다.

people_list에 key는  신고당한사람 value는 신고한 사람. 

세번째 for문

if문은 k 몇번이상 신고당해야 신고한사람이 메일을 받을지 결정