*문제 출처는 백준에 있습니다.
문제 제목: 트리 / 1068번 (골드 5단계)
문제 사이트: https://www.acmicpc.net/problem/1068
문제 설명
나의 풀이
def make_graph(nodes, len_n, delete):
# 노드를 이용해서 그래프로 변환한다.
graph = [[] for _ in range(len_n)]
# 방문한 곳은 다시 방문하지 않도록 처리
visit = [False] * len_n
# 삭제될 노드는 방문하지 않는다.
visit[delete] = True
# 시작 노드를 결정
root = -1
# answer 전역 변수
global answer
for i in range(len_n):
if nodes[i] == -1:
root = i
# 삭제 노드가 부모노드이면 0을 반환한다.
if delete == root:
return 0
else:
# 삭제된 노드와 연결된 노드 추가하지 않음
if i != delete and nodes[i] != delete:
graph[nodes[i]].append(i)
dfs(graph, root, visit, delete)
return answer
def dfs(graphs, start, visited, delete):
visited[start] = True
# 현재 노드의 모든 자식 노드를 탐색
child_count = 0
for child in graphs[start]:
if not visited[child] and child != delete:
dfs(graphs, child, visited, delete)
child_count += 1
# 자식 노드가 없으면 리프 노드로 간주
if child_count == 0:
global answer
answer += 1
if __name__ == "__main__":
# 노드의 개수
n = int(input())
# 노드
node = list(map(int, input().split()))
# 삭제될 노드
d = int(input())
answer = 0
print(make_graph(node, n, d))
※ 알아야 할 것
'코딩테스트(프로그래머스 & 백준) > 백준-Python' 카테고리의 다른 글
백준 / 소트인사이드 / 1427번 / Python (0) | 2025.01.05 |
---|---|
백준 / 덩치 / 7568번 / Python (0) | 2025.01.04 |
백준 / 저울 / 2437번 / Python (1) | 2024.12.27 |
백준 / 구슬 탈출 2 / 13460번 / Python (0) | 2024.12.26 |
백준 / 가장 긴 증가하는 부분 수열 5 / 14003번 / Python (0) | 2024.12.25 |