Day87

강태훈·2026년 5월 6일

nbcamp TIL

목록 보기
87/97

알고리즘 코드카타

Find Followers Count

select user_id, count(distinct follower_id) as followers_count
from Followers
group by user_id;

신고 결과 받기

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

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

        Arrays.fill(answer, 0);

        for(String id: id_list){
            List<Integer> reportedId = new ArrayList<>();

            for (String r : report){
                String[] arr = r.split(" ");

                if (!arr[1].equals(id)){
                    continue;
                }

                int index = finding(id_list, arr[0]);
//                System.out.println("index : " + index);

                if (index < 0){
                    continue;
                }
                if (reportedId.isEmpty()){
                    reportedId.add(index);
                    continue;
                }
                if (!reportedId.contains(index)){
                    reportedId.add(index);
                }
            }

//            System.out.println("reportedId : " + reportedId);
            if (reportedId.size() < k){
                continue;
            }
            for (int i: reportedId){
                answer[i]++;
            }
        }

        return answer;
    }

    public int finding(String[] id_list, String nickname){
        int index = -1;

        for(int i = 0; i < id_list.length; i++){
            if(id_list[i].equals(nickname)){
                index = i;
                break;
            }
        }

        return index;
    }
}
  • 런타임 에러가 발생해서 아래로 수정
import java.util.*;

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

        // 중복 신고 처리를 쉽게 하기 위해 List 대신 Set(HashSet)을 사용합니다.
        Map<String, Set<String>> reportList = new HashMap<>();
        Map<String, Integer> reportCount = new HashMap<>();

        for (String r : report) {
            String[] parts = r.split(" ");

            // 컴파일 에러 수정 및 초기화 로직 분리
            reportList.putIfAbsent(parts[0], new HashSet<>());
            // Set.add()는 최초 추가 시에만 true를 반환하므로 중복 카운팅을 방지할 수 있습니다.
            if (reportList.get(parts[0]).add(parts[1])) {
                // 신고자가 아닌 '신고 당한 사람'의 카운트를 증가시킵니다.
                reportCount.put(parts[1], reportCount.getOrDefault(parts[1], 0) + 1);
            }
        }

        for (int i = 0; i < id_list.length; i++) {
            // 신고 기록이 없는 유저에 대한 NullPointerException을 방지합니다.
            Set<String> part = reportList.getOrDefault(id_list[i], new HashSet<>());
            for (String p : part) {
                if (reportCount.getOrDefault(p, 0) >= k) {
                    // indexOf를 매번 호출하지 않고 i 인덱스를 직접 사용하여 성능을 향상시킵니다.
                    answer[i]++;
                }
            }
        }

        return answer;
    }
}
  • map 너무 어렵다...

0개의 댓글