728x90
반응형
https://www.acmicpc.net/problem/3584
3584번: 가장 가까운 공통 조상
루트가 있는 트리(rooted tree)가 주어지고, 그 트리 상의 두 정점이 주어질 때 그들의 가장 가까운 공통 조상(Nearest Common Anscestor)은 다음과 같이 정의됩니다. 두 노드의 가장 가까운 공통 조상은, 두
www.acmicpc.net
풀이
이 문제는 주어진 노드에서 부모 노드를 확인하며 공통 부모 노드를 찾는 문제이기 때문에 graph[자식노드]에 부모노드를 저장했다.
그리고 set배열에 먼저 주어진 노드 중 하나에 대한 부모 노드를 모두 저장해 주었다. 여기서 set을 사용한 이유는 set안의 존재여부를 판단할 때, 시간 복잡도가 O(1)이 걸리기 때문이다.
하나의 노드에 대한 부모노드를 모두 저장한 후, 나머지 노드에 대해 부모의 노드를 하나씩 set에 존재여부를 판단하고 존재하면 해당 노드를 출력 후 break로 해당 트리에 대한 조사를 멈추었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
for _ in range(int(input())):
N=int(input())
graph=[[]for _ in range(N+1)]
for _ in range(N-1):
a,b=map(int,input().split())
graph[b].append(a)
a_node,b_node=map(int,input().split())
setB = {b_node}
while graph[b_node]:
if graph[b_node]:
b_node=graph[b_node][0]
setB.add(b_node)
while True:
if a_node in setB:
print(a_node)
break
if graph[a_node]:
a_node=graph[a_node][0]
|
cs |
728x90
반응형
'Python3 > 백준 알고리즘' 카테고리의 다른 글
2022.05.17 [백준] (python 파이썬) 아기 상어 (0) | 2022.05.17 |
---|---|
2022.05.16 [백준] (python 파이썬) 달팽이 (0) | 2022.05.16 |
2022.05.09 [백준] (python 파이썬) 트리의 부모 찾기 (0) | 2022.05.09 |
2022.04.25 [백준] (python 파이썬) 동전 뒤집기 (0) | 2022.04.25 |
2022.04.24 [백준] (python 파이썬) N-Queen (0) | 2022.04.24 |
댓글