본문 바로가기

Algorithm

[Algorithm/Java][프로그래머스] 신고 결과 받기

반응형

[프로그래머스] 2022 KAKAO BLIND RECRUITMENT 신고 결과 받기

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

문제접근

일단 문제가 고려해야 할 것들이 많아서 처음에는 신고 당한 횟수, 신고한 사람, 알림 메일을 받을 횟수를 모두 따로 map을 이용해서 3개의 map을 만들어서 접근했는데 너무 복잡해서 그냥 3개의 정보를 가진 User 클래스를 만들게 되었다. 이렇게 하니까 더 생각하기 쉬웠고 내가 느끼기에는 복잡함이 많이 줄어들었다.

Code

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

class Solution {
    class User {
        HashSet<String> report; // 신고한 사람들 모음
        int count; // 신고 받은 횟수
        int alarm; // 메일 횟수
        User() {
            count = 0;
            alarm = 0;
            report = new HashSet<>();
        }
        public void beReported(){
            count += 1;
        }
        public void addAlarm(){
            alarm += 1;
        }

    }
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        HashMap<String, User> users = new HashMap<>();
        for(int i = 0; i<id_list.length; i++){
            // users 초기화
            users.put(id_list[i],new User());
        }
        for (int i = 0; i < report.length; i++) {
            // 신고 처리
            String[] temp = report[i].split(" ");
            if(users.get(temp[0]).report.contains(temp[1])) continue;
            users.get(temp[0]).report.add(temp[1]);
            users.get(temp[1]).beReported();
        }
        for(int i = 0; i< id_list.length; i++){
            // 신고 결과 메일 처리
            if(users.get(id_list[i]).report.isEmpty()){
                answer[i] = 0;
                continue;
            }
            for(String reported: users.get(id_list[i]).report){
                if(users.get(reported).count >= k){
                    answer[i] += 1;
                }
            }
        }
        return answer;
    }
}

어려웠던 점 / 배운 점 / 느낀 점

class를 이용하니까 더 간단하게? 생각하게 된 것 같다. 처음에 문제를 봤을 때는 뭐지 어려워 보이는데 라고 생각을 했는데 막상 풀고보니까 쉬운 문제같다고 느껴졌다.
그리고 코테에서도 private으로 선언하여 getter/setter를 만들어 줘야 할까? 라는 의문을 가지게 되었는데... 너무 길어져서 굳이 할 필요 없을것 같다는 느낌을 받아서 그렇게 하지는 않았다.

반응형