[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 을 늘려줘야 문제를 통과할 수 있다는 것.