문제 : https://school.programmers.co.kr/learn/courses/30/lessons/92334
접근 :
- 유저 객체를 생성한 후 유저의 id와 신고횟수, 정지 여부를 필드값으로 가진다.
- 신고가 만약 중복된 내용이 아니라면, Map 에 신고한 유저 Id에 신고 당한 유저의 신고 횟수를 늘리고 저장한다.
- 신고 당한 유저를 한명씩 확인하면서 K 이상이면 정지를 시킨다.
- 모든 유저를 순회하면서 해당 유저가 신고한 정지한 유저가 있는경우 정답 배열의 카운트를 증가시킨 후 출력한다.
코드 구현 :
import java.util.*;
class Solution {
static class User{
private String name;
private int reported;
private boolean ban;
public User(String name){
this.name = name;
this.reported = 0;
this.ban = false;
}
public void increaseReported(){
this.reported++;
}
public void updateBan(boolean ban){
this.ban = ban;
}
}
public int[] solution(String[] id_list, String[] report, int k) {
Map<String, List<User>> users = new HashMap<>();
Map<String, User> reported = new HashMap<>();
for(String id : id_list) {
users.put(id, new ArrayList<>());
reported.put(id, new User(id));
}
//신고 처리
Set<String> reports = new HashSet<>();
String[] temp;
User reported_user;
for(String r : report){
if(!reports.add(r)) continue;
temp = r.split(" ");
reported_user = reported.get(temp[1]);
reported_user.increaseReported();
users.get(temp[0]).add(reported_user);
}
//신고 횟수 기준 정지 처리
for(String id : id_list){
if(reported.get(id).reported < k) continue;
reported.get(id).updateBan(true);
}
//신고한 회원 기준 정지 메일수 산정
int[] answer = new int[id_list.length];
for(int i = 0 ; i < id_list.length ; i++){
for(User u : users.get(id_list[i])){
if(u.ban) answer[i]++;
}
}
return answer;
}
}
'JAVA > Coding Test' 카테고리의 다른 글
[JAVA] 프로그래머스 양궁대회_구현 (2) | 2024.09.25 |
---|---|
[JAVA] 프로그래머스 이모티콘 할인행사_구현 (2) | 2024.09.25 |
[JAVA] 프로그래머스 우박수열 정적분_누적합 (0) | 2024.09.03 |
[JAVA] 프로그래머스 디펜스 게임_우선순위 큐 (0) | 2024.08.30 |
[JAVA] 프로그래머스 리코쳇 로봇_탐색 (2) | 2024.08.28 |