🌞Algorithm/🔥programmers

[programmers] 가장 먼 노드

뿌야._. 2026. 7. 21. 10:53
문제
https://school.programmers.co.kr/learn/courses/30/lessons/49189
 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


< 가장 먼 노드 >

 

문제 풀이 (Java)

import java.util.*;

class Solution {
	public int solution(int n, int[][] edge) {
		int answer = 0;

		ArrayList<ArrayList<Integer>> list = new ArrayList<>();

		for (int i = 0; i < n + 1; i++) {
			list.add(new ArrayList<>());
		}

		for (int i = 0; i < edge.length; i++) {
			list.get(edge[i][0]).add(edge[i][1]);
			list.get(edge[i][1]).add(edge[i][0]);
		}

		int depth[] = new int[n + 1];

		bfs(list, depth);

		int max = 0;
		for (int i = 1; i < n + 1; i++) {
			if (max < depth[i]) {
				max = depth[i];
				answer = 1;
			} else if (max == depth[i]) {
				answer += 1;
			}
		}

		return answer;
	}

	private void bfs(ArrayList<ArrayList<Integer>> list, int[] depth) {
		Queue<Integer> queue = new LinkedList<>();
		queue.add(1);

		boolean visited[] = new boolean[list.size()];
		visited[1] = true;

		while (!queue.isEmpty()) {
			int num = queue.poll();

			for (int temp : list.get(num)) {
				if (!visited[temp]) {
					visited[temp] = true;
					depth[temp] = depth[num] + 1;
					queue.add(temp);
				}
			}
		}
	}
}

 

ArrayList에 간선을 양방향으로 저장한다. bfs를 호출한 뒤 depth를 살펴보며 가장 멀리 떨어진 노드의 개수를 구한다.

 

bfs 함수에서는 Queue에 시작 노드인 1을 저장하고 방문 표시를 한 뒤 Queue가 빌 때까지 다음 과정을 반복한다. 

1. queue poll

2. 현재 노드와 연결된 노드를 살펴보며 아직 방문하지 않은 노드라면 방문 표시, 떨어진 간선 개수를 업데이트 한 뒤 queue에 저장한다.



 

출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges

'🌞Algorithm > 🔥programmers' 카테고리의 다른 글

[programmers] 베스트앨범  (0) 2026.07.24
[programmers] 정수 삼각형  (0) 2026.07.22
[programmers] 단어 변환  (0) 2026.07.20
[programmers] 네트워크  (0) 2026.07.15
[programmers] 타겟 넘버  (0) 2026.07.14