<문제 링크>
https://www.acmicpc.net/problem/1068
<정답 코드>
sol ) dfs를 이용한 리프 노드 탐색
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import sys
input = sys.stdin.readline
def dfs(node, tree, visited):
visited[node] = True
for i in range(len(tree)):
if tree[i] == node and not visited[i]:
dfs(i, tree, visited)
n = int(input())
tree = list(map(int, input().split()))
del_node = int(input())
visited = [False] * n
# 삭제할 노드와 그 자손들 방문 처리
dfs(del_node, tree, visited)
# 리프 노드 계산
leaf_cnt = 0
for i in range(n):
if not visited[i]:
# 현재 노드가 리프 노드라고 일단 가정
is_leaf = True
for j in range(n):
# 노드 j의 부모 노드가 i이고 삭제되지 않은 경우(not visited[j])
if tree[j] == i and not visited[j]:
# i는 리프노드가 아님
is_leaf = False
break
if is_leaf:
leaf_cnt += 1
print(leaf_cnt)
|
cs |
DFS로 삭제 대상 노드의 자식 노드들을 모두 방문하고
방문하지 않은 노드 대상으로 리프 노드 여부를 검사해 그 수를 센다.
DFS가 그래프 전체 뿐만 아니라 부분에 대한 탐색을 할 때도 사용할 수 있다는 아이디어를 떠올리지 못했다.
'프로그래밍 > Python' 카테고리의 다른 글
백준_python 13549번 숨바꼭질 (메모리 초과, BFS, 최단거리) (0) | 2024.09.09 |
---|---|
백준_python 3273번 두 수의 합 (정렬, 투 포인터) (6) | 2024.09.02 |
백준_python 1991번 트리 순회 (Node class, 트리, 재귀) (0) | 2024.08.19 |
백준_python 9372번 상근이의 여행 (그래프, 트리) (0) | 2024.08.08 |
백준_python 1926번 그림 (DFS, BFS) (0) | 2024.08.04 |