본문 바로가기
알고리즘/문제 풀이 (출처: 프로그래머스)

[JAVA/BFS] 가장 먼 노드

by 이민우 2024. 2. 23.
728x90
반응형

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

import java.util.*;

class Solution {
    public int solution(int n, int[][] edge) {
        int answer = 0;
        
        // edge와 방문 기록 저장
        Map<Integer, List<Integer>> edgeMap = new HashMap<>();
        boolean[] visited = new boolean[n+1];
        
        // edgeMap 초기화
        for(int i=1; i<=n; i++) {
            edgeMap.put(i, new ArrayList<>());
        }
        
        // 빠른 계산을 위해 edge를 Map으로 만들기
        for(int[] e : edge) {
            // 양방향성
            edgeMap.get(e[0]).add(e[1]);
            edgeMap.get(e[1]).add(e[0]);
        }

        // BFS로 연산하면 단순함.
        // Integer[]는 점, 거리 순
        Queue<Integer[]> bfsQueue = new LinkedList<>();

        // 초기 세팅
        int max = 1;
        bfsQueue.add(new Integer[]{1, max});
        visited[1] = true;
        
        // 연산 시작
        while(!bfsQueue.isEmpty()) {
            Integer[] now = bfsQueue.poll();
            
            // max 갱신 및 answer 갱신
            if(max == now[1]) {
                // max와 같으면 answer을 더함
                answer++;
            }
            else {
                // max가 갱신되었으면 answer이 초기화됨.
                answer = 1;
            }
            max = Math.max(now[1], max);
            
            // 방문하지 않은 점 하나씩 추가
            for(int spot : edgeMap.get(now[0])) {
                if(!visited[spot]) {
                    bfsQueue.add(new Integer[]{spot, now[1]+1});
                    visited[spot] = true;
                }
            }
            
        }
        
        return answer;
    }
}
728x90
반응형

'알고리즘 > 문제 풀이 (출처: 프로그래머스)' 카테고리의 다른 글

[JAVA/DFS] 여행경로  (0) 2024.02.24
[JAVA/DFS] 네트워크  (0) 2024.02.23
[JAVA] 과제 진행하기  (0) 2024.02.23
[JAVA] 디펜스 게임  (0) 2024.02.22
[JAVA/DP] 연속 펄스 부분 수열의 합  (0) 2024.02.22