본문 바로가기
Algorithm

[탐색/DFS] 백준 1967 트리의 지름 - 파이썬(Python)

by jangThang 2022. 10. 18.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    1967번: 트리의 지름

    파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     트리의 양 끝단의 거리를 재는 문제입니다. 즉, 가장 먼 노드 간의 거리를 재야 합니다.

     

    2022.02.23 - [Algorithm] - [Algorithm] 깊이 우선 탐색(DFS), 끝까지 찾고 넘어가자

     

    [Algorithm] 깊이 우선 탐색(DFS), 끝까지 찾고 넘어가자

     DFS는 인접노드가 없을 때까지, 끝까지 탐색하는 알고리즘입니다. 스택을 이용한 DFS 구현방법과 코드를 알아보겠습니다. [ Contents ] 1. DFS(Depth First Search) 깊이 우선 탐색(DFS): 방문하지 않은 인접.

    star7sss.tistory.com

     루트 노드가 주어지지 않기 때문에, 총 2번의 탐색이 필요합니다.

     

    1) 1번 노드(어떤 노드든 괜찮음)에서 가장 먼 노드를 dfs 탐색으로 찾아냅니다.
    2) 찾아낸 노드에서 가장 먼 노드를 찾아서 거리를 측정합니다. 

     

     

     

    3. 코드

    import sys
    sys.setrecursionlimit(10**9)  # dfs 반복횟수 제한 해제
    input = sys.stdin.readline
    
    # 입력
    n = int(input())
    graph = [[] for _ in range(n+1)]
    
    for _ in range(n-1):
        parent, child, weight = map(int, input().split())
        graph[parent].append([child, weight])
        graph[child].append([parent, weight])
    
    # dfs
    def dfs(x, dist):
        for i in graph[x]:
            node, wei = i
            if distance[node] == -1:
                distance[node] = dist + wei
                dfs(node, dist + wei)
    
    # 1번 노드에서 가장 먼 곳을 찾음
    distance = [-1] * (n+1)
    distance[1] = 0
    dfs(1, 0)
    
    # 찾은 노드에서 가장 먼 노드를 찾음
    res = distance.index(max(distance))
    distance = [-1] * (n+1)
    distance[res] = 0
    dfs(res, 0)
    
    # 출력
    print(max(distance))

     dfs 탐색과 관련된 설명과 코드는 위 링크에서 보실 수 있습니다.

     

    star가 되고나서 Tistory

    반응형

    댓글