인프런 커뮤니티 질문&답변

버럼님의 프로필 이미지
버럼

작성한 질문수

[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편

알고리즘 수업 - 깊이 우선 탐색 2 (백준 24480)

널 포인터 에러

해결된 질문

작성

·

280

1

  •  

    import java.io.*;
    import java.util.*;
    
    public class Main {
    
        static final int MAX = 100000 + 10;
        static ArrayList<Integer>[] graph;
        static boolean[] visited;
        static int[] answer;
        static int N, M, R;
        static int order;
    
        public static void dfs(int idx) {
            visited[idx] = true;
            answer[idx] = order;
            order++;
    
            for (int i = 0; i < graph[idx].size(); i++) {
                int next = graph[idx].get(i);
                if (!visited[next]) {
                    dfs(next);
                }
            }
    
        }
        public static void main(String[] args) throws IOException {
    
            // 0. 입력 및 초기화
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            StringTokenizer st = new StringTokenizer(br.readLine());
    
            N = Integer.parseInt(st.nextToken());
            M = Integer.parseInt(st.nextToken());
            R = Integer.parseInt(st.nextToken());
    
            graph = new ArrayList[MAX];
            for (int i = 1; i <= N; i++) {
                graph[i] = new ArrayList<>();
            }
            visited = new boolean[MAX];
            answer = new int[MAX];
            order = 1;
    
            for (int i = 0; i < M; i++) {
                st = new StringTokenizer(br.readLine());
                int x = Integer.parseInt(st.nextToken());
                int y = Integer.parseInt(st.nextToken());
                graph[x].add(y);
                graph[y].add(x);
            }
    
            // 2. 내림차순 정렬
            for (int j = 0; j < N; j++) {
                Collections.sort(graph[j], Collections.reverseOrder());
            }
    
            // 3. 재귀함수 출력
            dfs(R);
    
            for (int k = 1; k <= N; k++) {
                bw.write(String.valueOf(answer[k]));
                bw.newLine();
            }
    
            br.close();
            bw.close();
        }
    }

    해당 코드를 구현했는데, 널 포인터 에러가 뜹니다..!
    어떤 부분에서 잘못됐는지 피드백 받고자 질문드립니다!


    감사합니다

답변 1

1

버럼님 안녕하세요 :)

올려주신 코드 확인했는데 정렬하는 부분에서 반복문을 0부터 N미만까지 돌고 있어서 0번 인덱스를 접근할 때 null pointer exception이 발생하는 것 같아요!

생성하실 때는 1부터 N 이하까지 제대로 생성됐지만, sorting시의 인덱스가 잘못된 것 같고, 이것만 수정하면 큰 문제 없을 것 같습니다:)

오늘도 공부 화이팅하세요!!

버럼님의 프로필 이미지
버럼

작성한 질문수

질문하기