코진남
프로그래머스 신고! 본문
문제 설명
신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.
- 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
- 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
- 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 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 몇번이상 신고당해야 신고한사람이 메일을 받을지 결정
'코딩테스트' 카테고리의 다른 글
프로그래머스 체육복, 포켓몬 (0) | 2022.03.31 |
---|---|
프로그래머스 체육복 (0) | 2022.03.30 |
프로그래머스 완주하지 못한 선수 (0) | 2022.03.26 |
프로그래머스 키패드 문제 (0) | 2022.03.23 |
프로그래머스 크레인 문제 (0) | 2022.03.22 |