첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다. 셋째 줄에는 지울 노드의 번호가 주어진다.
출력
첫째 줄에 입력으로 주어진 트리에서 입력으로 주어진 노드를 지웠을 때, 리프 노드의 개수를 출력한다.
입력 예시
5
-1 0 0 1 1
2
출력 예시
2
풀이
DFS 문제. DFS는 루트 노드부터 재귀적으로 모든 자손 노드를 방문하되, 방문할 수 있는 노드가 0이라면 리프 노드이므로 개수를 세면 된다. 이 때 방문할 수 있는 노드는 visited로 판단할 수 있다.
풀이 코드
from collections import defaultdict
import sys
input = sys.stdin.readline
N = int(input())
child_dict = defaultdict(list)
visited = [False]*N
ans = 0
for node, parent in enumerate(map(int, input().split())) :
if parent != -1 :
child_dict[parent].append(node)
else :
root = node
def dfs(node) :
global ans
tmp = 0
for child in child_dict[node] :
if not visited[child] :
dfs(child)
tmp += 1
if not tmp :
ans += 1
visited[int(input())] = True
if not visited[root] :
dfs(root)
print(ans)