본문 바로가기
알고리즘

프로그래머스 가장 먼 노드 bfs문제 -java

by 창따오 2023. 12. 2.
728x90

출처: https://school.programmers.co.kr/learn/courses/30/lessons/49189



소스코드

import java.util.*;
class Solution {
    List<List<Integer>> graph;
    int [] distance;
    boolean [] visited;
    public int solution(int n, int[][] edge) {
        int cnt =0;
        graph = new ArrayList<>(n+1);
        distance = new int[n+1];
        visited = new boolean[n+1];
        for(int i = 0; i<=n;i++){
            graph.add(new ArrayList<>());
        }
        for(int i = 0; i<edge.length; i++){
            int start = edge[i][0];
            int end = edge[i][1];
            graph.get(start).add(end);
            graph.get(end).add(start);
        }
        bfs(1);
        Arrays.sort(distance);
        int max = distance[distance.length-1];
        for(int i =distance.length-1; i>=0;i--){
            if(distance[i]==max)
                cnt++;
            else if(distance[i]<max) break;
        }
        return cnt;
    }
    void bfs(int start){
        Queue<Integer> q = new LinkedList<>();
        q.offer(start);
        visited[start]= true;
        while(!q.isEmpty()){
            int curNode = q.poll();
            for(int i =0; i<graph.get(curNode).size(); i++){
                int node = graph.get(curNode).get(i);
                if(!visited[node]){
                    visited[node]= true;
                    q.offer(node);
                    distance[node]= distance[curNode]+1;
                }
            }
        }
    }
}

느낀점 : IDE를 이용하지않고 프로그래머스 페이지에서 문제풀이를 진행하였다. 문제풀이가 어느정도 길어진다 싶으면 System.out.println 등 다양한 방법을 이용해서 check하면서 넘어가자.

  1. auto import를 사용하다 보니, 뭘 import 해야될 지 몰라서 오류가 있었다.
  2. 배열과 리스트를 사용하다보니 소괄호( ), 대괄호[ ]를 잘못입력하여 오류가 난 경우도 있었다.
  3. 로직은 틀린게 없어도, IDE를 사용하지않고, 테스트를 진행 했을 때 난감한 상황을 겪는다.
    주기적으로 IDE없이 코딩테스트를 준비하는 습관을 가지자.