[Gold V] Title: 트리, Time: 40 ms, Memory: 32412 KB -BaekjoonHub
This commit is contained in:
40
백준/Gold/1068. 트리/README.md
Normal file
40
백준/Gold/1068. 트리/README.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# [Gold V] 트리 - 1068
|
||||
|
||||
[문제 링크](https://www.acmicpc.net/problem/1068)
|
||||
|
||||
### 성능 요약
|
||||
|
||||
메모리: 32412 KB, 시간: 40 ms
|
||||
|
||||
### 분류
|
||||
|
||||
깊이 우선 탐색, 그래프 이론, 그래프 탐색, 트리
|
||||
|
||||
### 제출 일자
|
||||
|
||||
2025년 3월 2일 23:57:00
|
||||
|
||||
### 문제 설명
|
||||
|
||||
<p>트리에서 리프 노드란, 자식의 개수가 0인 노드를 말한다.</p>
|
||||
|
||||
<p>트리가 주어졌을 때, 노드 하나를 지울 것이다. 그 때, 남은 트리에서 리프 노드의 개수를 구하는 프로그램을 작성하시오. 노드를 지우면 그 노드와 노드의 모든 자손이 트리에서 제거된다.</p>
|
||||
|
||||
<p>예를 들어, 다음과 같은 트리가 있다고 하자.</p>
|
||||
|
||||
<p style="text-align: center"><img alt="" src="https://upload.acmicpc.net/560de878-d961-475e-ada4-e1f0774e5a84/-/preview/" style="width: 200px; height: 185px;"></p>
|
||||
|
||||
<p>현재 리프 노드의 개수는 3개이다. (초록색 색칠된 노드) 이때, 1번을 지우면, 다음과 같이 변한다. 검정색으로 색칠된 노드가 트리에서 제거된 노드이다.</p>
|
||||
|
||||
<p style="text-align: center"><img alt="" src="https://upload.acmicpc.net/d46ddf4e-1b82-44cc-8c90-12f76e5bf88f/-/preview/" style="width: 200px; height: 185px;"></p>
|
||||
|
||||
<p>이제 리프 노드의 개수는 1개이다.</p>
|
||||
|
||||
### 입력
|
||||
|
||||
<p>첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다. 셋째 줄에는 지울 노드의 번호가 주어진다.</p>
|
||||
|
||||
### 출력
|
||||
|
||||
<p>첫째 줄에 입력으로 주어진 트리에서 입력으로 주어진 노드를 지웠을 때, 리프 노드의 개수를 출력한다.</p>
|
||||
|
||||
34
백준/Gold/1068. 트리/트리.py
Normal file
34
백준/Gold/1068. 트리/트리.py
Normal file
@@ -0,0 +1,34 @@
|
||||
import sys
|
||||
sys.setrecursionlimit(10**6)
|
||||
input = sys.stdin.readline
|
||||
N = int(input())
|
||||
visited = [False] * (N)
|
||||
tree = [[] for _ in range(N)]
|
||||
answer = 0
|
||||
p = list(map(int, input().split()))
|
||||
|
||||
for i in range(N):
|
||||
if p[i] != -1:
|
||||
tree[i].append(p[i])
|
||||
tree[p[i]].append(i)
|
||||
else:
|
||||
root = i
|
||||
|
||||
def DFS(number):
|
||||
global answer
|
||||
visited[number] = True
|
||||
cNode = 0
|
||||
for i in tree[number]:
|
||||
if not visited[i] and i != deleteNode:
|
||||
cNode += 1
|
||||
DFS(i)
|
||||
if cNode == 0:
|
||||
answer += 1
|
||||
|
||||
deleteNode = int(input())
|
||||
|
||||
if deleteNode == root:
|
||||
print(0)
|
||||
else:
|
||||
DFS(root)
|
||||
print(answer)
|
||||
Reference in New Issue
Block a user