나의 풀이
from collections import deque
def solution(n, edge):
visited = [-1] * (n+1)
graph = [[] for _ in range(n+1)]
q = deque()
for x,y in edge :
graph[x].append(y)
graph[y].append(x)
q.append(1)
visited[1] = 0
while q :
node = q.popleft()
for i in graph[node] :
if visited[i] == -1 :
visited[i] = visited[node] + 1
q.append(i)
max_cnt = max(visited)
return visited.count(max_cnt)
- BFS 로 푼 문제이다.
- 1번 노드로부터 최대로 떨어져있는 노드를 구하는 문제이므로, 1번 노드를 맨 처음 큐에 넣고 시작한다.
- 또한, 1번 노드로부터 최단 경로를 구해야 하므로, visited[] 라는 변수로 해당 노드의 방문 여부를 확인한다.
- graph[] 리스트를 통해 x번째 노드와 연결된 모든 노드들을 저장해둔다.
- 큐가 빌 때까지 반복문을 돈다.
- 큐에서 가장 먼저 들어가있는 노드를 꺼내고, 해당 노드와 연결된 노드들을 탐색한다.
- 연결된 노드 중 아직 방문하지 않은 노드에 대해, 현재 노드 + 1이라는 값을 부여하고, 큐에 삽입한다.
- 반복문을 탈출한 후, visited[] 에 담긴 값 중 가장 큰 값이 1과 가장 멀리 떨어져있는 노드의 거리일 것이다.
- 따라서 해당 값을 가진 노드의 개수를 리턴해주면 된다.
'알고리즘 > Graph 그래프' 카테고리의 다른 글
[백준] 2250번: 트리의 높이와 너비 - java (0) | 2023.02.27 |
---|---|
[백준] 1167번: 트리의 지름 - java (0) | 2023.02.18 |
[백준] 3665번: 최종 순위 - 파이썬(python) (0) | 2022.10.21 |
[벡준] 2887번: 행성 터널 - 파이썬(python) (0) | 2022.10.21 |
[프로그래머스] 순위 - 파이썬(python) (1) | 2022.09.25 |
댓글