문제를 정리해보자.
n개의 노드가 있는 그래프가 있다. 각 노드는 1부터 n까지 번호가 적혀있다.
1번 노드에서 가장 멀리 떨어진 노드의 개수를 구하자.
가장 멀리 떨어진 노드란?
최단 경로로 이동했을 때 간선의 개수가 가장 많은 노드이다.
풀이를 생각해보자.
간선에 가중치가 없다.
따라서 N번 노드와 1번 노드의 최단 경로는 간선이 가장 적은 경로이다.
예를 들어, 5번 노드와 1번 노드의 최단 경로는 1 -> 2 -> 5이다.
BFS로 최단 경로를 구할 수 있다.
구현해보자.
from collections import deque
def solution(n, edge):
graph = [[] for _ in range(n + 1)]
for node in edge:
A, B = node[0], node[1]
graph[A].append(B)
graph[B].append(A)
distance = [0] * n # 최대 간선 n-1개
# BFS 구현
queue = deque([[1, 0]]) # 노드, 트리 깊이
check = [0] * (n + 1) # 방문한 노드 확인
check[1] = 1
while queue:
pre_node = queue.popleft()
node = pre_node[0]
depth = pre_node[1]
for next_node in graph[node]:
if check[next_node] == 0:
check[next_node] = 1
queue.append([next_node, depth + 1])
distance[depth + 1] += 1
# 출력
for i in range(n-1, -1, -1):
if distance[i] != 0:
return distance[i]
solution(6, [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]])
마지막에는 가장 멀리 있는 노드의 개수를 출력한다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][2022 KAKAO BLIND RECRUITMENT][Python] 주차 요금 계산 (0) | 2022.02.07 |
---|---|
[프로그래머스][2022 KAKAO BLIND RECRUITMENT][Python] 신고 결과 받기 (0) | 2022.01.25 |
[프로그래머스][Python] 도둑질 (0) | 2022.01.18 |
[프로그래머스][Python] 등굣길 (2) | 2022.01.13 |
[프로그래머스][Python] 정수 삼각형 (0) | 2022.01.13 |