[BaekJoon 11725 : DFS/BFS, Python] - 트리의 부모 찾기

2021, Nov 09    

문제


백준 트리의 부모 찾기 : 실버 2


Solution


import sys
sys.setrecursionlimit(10000000)
from collections import defaultdict
input = sys.stdin.readline

n = int(input())            
tree = defaultdict(list)        # 트리 연결 구조에 대한 정보
parents = defaultdict(int)      # 자기자신의 부모 노드를 입력하는 사전
parents[1] = 1
left = []
for _ in range(n-1):
    p, c = map(int, input().split())
    tree[p].append(c)
    tree[c].append(p)

def findP(root):
    for v in tree[root]:
        if not parents[v]:       # 한 번도 상위의 노드와 연결된 적이 없으면(즉, 부모노드가 없으면)
            parents[v] = root
            findP(v)
findP(1)

for i in range(2, n+1):
    print(parents[i])


풀이과정 및 느낀점


이 문제에서 가장 어려웠던 부분은 트리의 연결 구조이다.
부모노드 자식노드가 있으면 보통 부모 –> 자식으로 일방향 연결을 하게 되는데,
이번 문제는 input 으로 주어지는 두 노드 간의 부모, 자식 여부를 따로 알려주지 않았기 때문에 일단 양방향으로 연결하고,
이후에 최상위의 루트노드부터 dfs 를 돌리면서 현재 노드보다 상위의 노드는 다시 parent 설정을 하지 않도록 해줬다.
주의할 점은, 재귀 limit 을 늘려줘야 문제를 통과할 수 있다는 것.