본문 바로가기
Baekjoon/트리

[백준] 11725번, 트리의 부모 찾기 | (python,파이썬)

by 성재심 2021. 7. 23.

문제 링크

 

 

11725번: 트리의 부모 찾기

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

www.acmicpc.net


문제


문제해결하기

 노드를 생성하여 트리를 구성하는데에 익숙한지라 하나하나 노드를 생성하여 트리를 만들려고 했지만, 노드 당 자식을 설정하는 것이 쉽지않아 실패했다.

 그래서 자식노드를 큰 제한없이 설정 가능한 그래프로 접근하기로 했다 ! DFS로 그래프를 순회하면서 부모의 정보를 업데이트 해주었다.


정답코드

import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

def DFS(G, v):
    visited_D[v] = True
    for w in G[v] :
        if visited_D[w] == False :
            parent[w] = v+1 #부모노드 정보 업데이트
            DFS(G,w)    

n = int(input())
G = [[] for _ in range(n)] #간선의 정보 저장
parent = [0 for _ in range(n)] #부모노드의 정보 저장

for i in range(n-1) :
    a,b = [int(x) for x in input().split()]
    G[a-1].append(b-1)
    G[b-1].append(a-1)

visited_D = [False]*n
DFS(G,0)
for i in range(1,n): #루트노드를 제외한 각 노드의 부모노드 출력
    print(parent[i])

▶ sys.setrecursionlimit(10**6)을 통해 재귀의 깊이를 늘려주었다.

▶빠른 입력을 위해 sys.stdin.readline !