문제풀이/DFS & BFS

[파이썬] [DFS] 백준 1068 트리

승무_ 2022. 5. 11. 10:47

문제

https://www.acmicpc.net/problem/1068

 

1068번: 트리

첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다

www.acmicpc.net

코드

n=int(input())

graph=[[]*n for _ in range(n)]

array=list(map(int, input().split()))
for i,k in enumerate(array):
    if k>=0:
        graph[k].append(i)
    else:
        start=i
re=int(input())

if re==start:
    print(0)
    exit(0)

result=0
find=0
for i in range(n):
    for j in range(len(graph[i])):
        if re==graph[i][j]:
            find=i
graph[find].remove(re)

def dfs(x):
    global result
    if not graph[x]:
        result+=1
        return
    for i in graph[x]:
            dfs(i)

dfs(start)
print(result)