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 |
반응형