CS/알고리즘_문제풀이(파이썬)

트리의 높이

Jedy_Kim 2021. 7. 7. 17:17
728x90

문제

트리의 높이는 루트로부터 가장 멀리 떨어진 노드와의 거리로 정의된다. 예를 들어, 아래의 트리에서 0번 노드가 루트라고 하면, 7번 노드까지의 거리가 가장 멀고, 그 거리는 3이다. 따라서 이 트리의 높이는 3이 된다.

트리가 주어질 때, 그 트리의 높이를 출력하는 프로그램을 작성하시오.

 

입력

첫 번째 줄에 트리의 노드 개수 n, 그리고 루트노드의 번호 r이 주어진다. ( 1 ≤ n ≤ 100, 0 ≤ r ≤ n - 1 ) 두 번째 줄부터 트리의 간선 정보가 주어진다. 각 줄은 2개의 숫자 a, b로 이루어지며, 이는 a번 노드와 b번 노드가 연결되어 있다는 뜻이다. 각 노드의 번호는 0 ~ n-1까지 존재한다. 또한, 연결이 되지않은 노드는 없다.  

출력

트리의 높이를 출력한다.

 

예제 입력

8 0

0 1

0 2

1 3

1 4

1 5

2 6

6 7

예제 출력

3

 

#코드

# 그래프의 관점에서 문제를 생각해야한다.

# 즉 부모 자식 관계가 아니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys
 
def getResult(x, idx):
  global data, max_level, visited
  # x는 레벨, idx는 해당위치의 값을 가지고 깊이를 탐색하는 메서드
 
  for i in range(len(data[idx])):
    if not visited[idx]: 
      if max_level < x:
        max_level = x
      visited[idx] = True
      getResult(x+1, data[idx][i])
      visited[idx] = False 
      
if __name__ == "__main__":
  input = sys.stdin.readline
  max_level = 0
  n, r     = map(int, input().split())
  get_data = [list(map(int, input().split())) for _ in range(n)]
  data     = [[] for _ in range(len(get_data))] 
  visited  = [False]*(n+1)
  
  for i in range(len(get_data)): 
    if len(get_data[i]) > 0:
      data[get_data[i][0]].append(get_data[i][1]) 
      data[get_data[i][1]].append(get_data[i][0]) 
  if len(data) > 0
    getResult(0, r) 
  print(max_level)
cs

 

반응형

'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글

타겟 넘버  (0) 2021.07.10
트리에서의 거리  (0) 2021.07.07
큐 구현하기  (0) 2021.07.06
  (0) 2021.07.05
구간의 합집합  (0) 2021.07.05