728x90
https://www.acmicpc.net/problem/3584
1. 입력받은 값으로 트리를 구성한다.
python의 defaultdict을 사용했다. 어처피 간선 정보는 자식노드 - 부모노드로 N-1개 주어지므로 리스트가 아니라 default(int) 로 value 값을 저장한다.
2. 재귀함수 (dfs)로 루트까지 가는 경로를 구하는 함수 작성
3. 각각의 노드에서 루트까지 가는 경로를 구한다.
4. 경로 중에서 가장 가까운 부모 노드를 찾는다.
from collections import defaultdict
import sys
sys.setrecursionlimit(10**9)
T = int(input())
# dfs 로 부모 찾기
def dfs(now, route, tree):
if tree[now] == 0:
route.append(now)
return route
p_node = tree[now]
route.append(now)
return dfs(p_node, route, tree)
for _ in range(T):
N = int(input()) # 1 ~ N
tree = defaultdict(int)
for _ in range(N-1):
a, b = map(int, input().split()) # a가 b의 부모
tree[b] = a
x, y = map(int, input().split())
route_x = dfs(x, [], tree)
route_y = dfs(y, [], tree)
answer = 0
flag = True
for node1 in route_x:
for node2 in route_y:
if node1 == node2:
answer = node1
flag = False
break
if not flag:
break
# 공통 조상 찾기
print(answer)
728x90
'Algorithm (PS)' 카테고리의 다른 글
[프로그래머스] 표 편집 (Python) - Linked List (0) | 2023.03.02 |
---|---|
[백준] 1987번: 알파벳 Python - DFS/Backtracking (0) | 2023.02.28 |
[백준] 17141 연구소 2 Python (0) | 2023.02.27 |
[백준] 11057번: 오르막 수 Python (DP) (0) | 2023.02.26 |
[프로그래머스] 다단계 칫솔 판매 - Python (tree 문제) (0) | 2023.02.23 |