[프로그래머스] 가장 먼 노드 JAVA

AMUD·2022년 8월 19일
0

Algorithm

목록 보기
28/78

문제


문제링크

접근

  • 다익스트라 형태로 풀이하였다.
  • 20분 컷인줄 알았는데... Queue의 자료형을 LinkedList이 아닌 PriorityQueue를 아무 생각 없이 쓴게 삽질 원인ㅜㅜ이었다.
  • 개인적으로 정점의 개수는 정해져있기 때문에 이중 ArrayList가 아닌 ArrayList배열이 더 적합해보였다.

소스 코드

import java.util.*;

class Main {
    public static void main(String[] args) throws Exception {
        int n = 11;
        int[][] edge = { { 1, 2 }, { 1, 3 }, { 2, 4 }, { 2, 5 }, { 3, 5 }, { 3, 6 }, { 4, 8 }, { 4, 9 }, { 5, 9 },
                { 5, 10 }, { 6, 10 }, { 6, 11 } };

        Solution sol = new Solution();
        System.out.println("result : " + sol.solution(n, edge));
    }
}

class Solution {
    public int solution(int n, int[][] edge) {
        int maxDis = -1, answer = 0, edgeCnt = edge.length;
        int[] distance = new int[n+1];
        boolean[] visited = new boolean[n+1];
        ArrayList<Integer>[] edges = new ArrayList[n + 1];
        Queue<Integer> q = new LinkedList<>();

        for (int i = 1; i <= n; i++) {
            distance[i] = 50000;
            edges[i] = new ArrayList<Integer>();
        }

        for (int i = 0; i < edgeCnt; i++) {
            edges[edge[i][0]].add(edge[i][1]);
            edges[edge[i][1]].add(edge[i][0]);
        }

        visited[1] = true;
        distance[1] = 0;
        q.add(1);
        while (!q.isEmpty()) {
            int currNum = q.poll();
            visited[currNum] = true;
            for (int i = 0; i < edges[currNum].size(); i++) {
                if (!visited[edges[currNum].get(i)]) {
                    distance[edges[currNum].get(i)] = Math.min(distance[edges[currNum].get(i)], distance[currNum] + 1);
                    maxDis = Math.max(maxDis, distance[edges[currNum].get(i)]);
                    q.add(edges[currNum].get(i));
                }
            }
        }

        for (int i = 1; i <= n; i++) {
            if (distance[i] == maxDis) answer++;
        }

        return answer;
    }
}
profile
210's Velog :: Ambition Makes Us Diligent

0개의 댓글