[baekjoon] 1068 트리(python)

정하나둘·2024년 7월 14일
0

baekjoon

목록 보기
3/3
import sys
input = sys.stdin.readline
cnt = int(input())
lst = list(map(int, input().strip().split()))   #각 노드마다 연결된 하위 노드 리스트로 보관
delete_node = int(input())
dict = {}
for i in range(cnt):
    dict[i] = []
for i in range(cnt):
    if lst[i] == -1:
        continue
    else:
        if i != delete_node:
            dict[lst[i]].append(i)  #하위 보관 리스트 추가, delete할 노트는 추가하지 않음

def loop(delete_node):     #재귀를 통해 삭제할 노드에 연결된 하위 노드들도 삭제
    if len(dict[delete_node]) != 0:
        while len(dict[delete_node]) != 0:
            for _ in range(len(dict[delete_node])):
                loop(dict[delete_node][0])
                dict[delete_node].pop(0)
    dict.pop(delete_node)

loop(delete_node)
cnt = 0
key_lst = dict.keys()
for i in key_lst:
    if len(dict[i]) == 0:   #리스트 길이가 0이면 리프 노드이므로 cnt 1추가
        cnt += 1
print(cnt)
profile
내가 다시 보려고 만드는 42서울 본과정 블로그

0개의 댓글