동캄의 코딩도장

백준 1068 [트리] 파이썬 본문

코테/BOJ

백준 1068 [트리] 파이썬

동 캄 2022. 9. 2. 14:22

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

 

1068번: 트리

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

www.acmicpc.net

# 백준 1068
from collections import deque
import sys
input = sys.stdin.readline
N = int(input())
lst = list(map(int, input().split()))
root = 0
del_num = int(input())
tree = [[] for _ in range(N)]
for i in range(N):
    if lst[i] == -1:
        root = i
    else:
        if i != del_num:
            tree[lst[i]].append(i)


def bfs(start, del_num):
    answer = 0
    visited = [0]*(N)
    visited[del_num] = 1
    q = deque([])
    q.append(start)
    while q:
        node = q.popleft()
        if visited[node] == 0 and len(tree[node]) != 0:
            visited[node] = 1
            for next_node in tree[node]:
                if visited[next_node] == 0:
                    q.append(next_node)
        elif visited[node] == 0 and len(tree[node]) == 0:
            answer += 1
    return answer


ans = bfs(root, del_num)
# print(tree)
print(ans)

i) 루트가 0이 아닐수도 있다.

ii) 중간에 노드가 삭제될 수 있다.

를 명심해서 코드를 수정하였다.

 

i) 루트인 경우

visited[root노드번호] =1 을 통해 bfs가 동작하지 않고 바로 탈출 하도록 하였다.

 

ii) 루트가 아닌경우

트리 자체에 연결하지 않음으로써 탐색되지 않도록 하였다.

'코테 > BOJ' 카테고리의 다른 글

백준 5014 [스타트링크] 파이썬  (0) 2022.09.03
백준 14719 [빗물] 파이썬  (0) 2022.09.03
백준 2251 [물통] 파이썬  (0) 2022.05.26
백준 2636 [치즈] 파이썬  (0) 2022.05.24
백준 2470 [두 용액] 파이썬  (0) 2022.05.24