2019.02.05) 백준 2250번 풀이 (PyPy3)

2019. 2. 5. 16:40프로그래밍(주력)/백준 문제풀이

알고리즘을 생각하고 시간초과를 보고

만들었더니 재귀한계로 런타임에러를 보고

좀 코드를 몰아서 쓰지 않고 펼쳐서 쓰니 얼떨결에 맞았다. 2일동안 고생한 보람이..

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
count = 0
 
= int(input())
 
graph = dict()
root = [0 for i in range(c + 1)]
 
 
for i in range(c):
    graph[i + 1= {}
 
# 입력
for i in range(c):
    now, left, right = list(map(int, input().split(' ')))
    graph[now] = (left, right)
    root[now] += 1
    # 자식한테 카운터 한개씩
    if left != -1:
        root[left] += 1
    if right != -1:
        root[right] += 1
 
# 루트는 자식한테 주는 카운터가 없으니 카운터가 1이겠죠
for i in range(c):
    if root[i + 1== 1:
        Root = i + 1
 
lev = list(0 for i in range(c))
his = list(list() for i in range(c + 1))
 
 
# 중위순회 기록
def inorder_traversal(root_node, level):
    global count, max_length, max_level, graph
 
    if graph[root_node][0!= -1:
        inorder_traversal(graph[root_node][0], level + 1)
 
    count += 1
    his[level].append(count)
 
    if graph[root_node][1!= -1:
        inorder_traversal(graph[root_node][1], level + 1)
 
 
inorder_traversal(Root, 1)
 
max_length = 0
max_level = 0
# 기록한거 간단하게 비교
for i in range(1, c + 1):
    if len(his[i]) == 0:
        break
    if his[i][-1- his[i][0+ 1 > max_length:
        max_level = i
        max_length = his[i][-1- his[i][0+ 1
 
print(max_level, max_length)
 
cs