-풀이
import sys
n = int(input())
tree = [[] for _ in range(n)]
p = list(map(int,sys.stdin.readline().split()))
for i in range(n):
tree[i] = p[i]
remove = int(input())
def delete(remove):
tree[remove] = -2
for i in range(n):
if tree[i] == remove:
tree[i] = -2
delete(i)
delete(remove)
cnt = 0
for i in range(n):
if tree[i] != -2:
err = 0
for j in tree:
if j == i:
err = 1
break
if err == 0:
cnt += 1
print(cnt)
-풀이설명
트리 문제인데, 제거한 노드에서 가지친 부분까지 제거하기 위해 DFS(깊이우선탐색)를 이용하여 모두 제거해준다. remove에 입력받은 노드 인덱스값을 기준으로 가지친 부분은 DFS를 통해 제거 표시를 해 줄 -2를 각 tree인덱스에 초기화해준다. 그런 뒤 반복문을 차례대로 돌려 -2가 아닌 부분을 찾아내, 그 부분에 대하여 가지친 부분이 있는지 없는지 검사한 후 없을 경우 cnt를 누적하여 값을 출력해준다.
'알고리즘' 카테고리의 다른 글
[정렬] 백준 1337파이썬 (올바른 배열) 실버4 (0) | 2022.05.15 |
---|---|
백준 대회 제 1회 곰곰컵 참가 (0) | 2022.05.14 |
[브루트포스,백트래킹]백준 1038 파이썬 (감소하는 수) 골드5 (0) | 2022.05.12 |
[수학] 백준 2581 파이썬 (소수) 실버5 (0) | 2022.05.10 |
[정렬] 백준 2822파이썬 (점수계산) 실버5 (0) | 2022.05.09 |