프로그래머스 그래프 가장 먼 노드 자바

자이로 체펠리·2021년 7월 1일
0
post-thumbnail

오랜만에 문제풀이

오랜만에 문제를 푼건 아니었고 매일매일 풀고 있었는데 그래프 탐색 감을 잡기 위해 남의 풀이만 보고 공부하다가 처음 스스로 푼 문제이기 때문에 기록이 늦었다.

문제링크

그래프가 주어지고 노드 1 부터 가장 먼 노드의 숫자를 카운팅 하는 것이다.
bfs로 레벨을 구하고 레벨 값이 가장 큰 값들을 count 하는 방식으로 코드를 작성했다.
평소 방법대로 풀이하니 메모리 초과 이슈가 발생했지만 인접 어레이를 int타입이 아닌 boolean 이차원 어레이로 타입을 변경하여 메모리 크기를 줄였다. 좀 치사한 것 같다.

import java.util.*;
class Solution {
    static boolean[][] map;
    static int[] visit;
    static int max;
    static int count;
    public int solution(int n, int[][] edge) {
        max =-1;
        map = new boolean[n+1][n+1];
        visit = new int[n+1];
        Arrays.fill(visit,0);
        
        for(int i=0;i<edge.length;i++){
            int from = edge[i][0];
            int to = edge[i][1];
            map[from][to]=true;
            map[to][from]=true;
        }
        
        Queue<Integer> q = new LinkedList<>();
        q.add(1);
        visit[1]=1;
        while(!q.isEmpty()){
            int tmp = q.poll();
            for(int i=1;i<=n;i++){
                if(map[tmp][i]&&visit[i]==0){
                    q.add(i);
                    visit[i]=visit[tmp]+1;
            
                    if(visit[i]>max){

                        count=1;
                        max=visit[i];
                    }else if(visit[i]==max){

                        count++;
                    }
                }
            }
           
    }
            return count;
        }
    }
    ```
profile
"경의를 표해라. 경의를 갖고 회전의 다음 단계로 나아가는 거다…… [LESSON 4] 다."

0개의 댓글