본문 바로가기
Problem Solving/Tree

[트리] 백준 1068번: 트리 / 골드 5

by ggyongi 2021. 6. 17.
반응형

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

 

1068번: 트리

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

www.acmicpc.net

import collections
n = int(input())
parents = list(map(int, input().split()))
graph = collections.defaultdict(list)

root = None
for i in range(n):
    if parents[i] == -1:
        root = i
    graph[parents[i]].append(i)

delete = int(input())

if root ==delete:
    print(0)
    quit()

global count
count = 0
def dfs(node):
    global count
    if node not in graph:
        count += 1
        return

    if graph[node] ==[delete]:
        count +=1
        return

    for next in graph[node]:
        if next != delete:
            dfs(next)

dfs(root)
print(count)

초반 코드는 빠르게 작성했지만 오류가 있었던 부분은

어떤 노드의 자식이 1개밖에 없는데 마침 그 자식이 delete 대상이었을 때

그 노드는 리프노드로 간주해야 한다는 것이었다. 

    if graph[node] ==[delete]:
        count +=1
        return

위의 부분이 그에 해당하는 파트다.

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글