최소 공통 조상 예제 - 1

문제 분석

  • 질의 개수 10,000개, 노드 개수 50,000개로 비교적 데이터가 크지 않아 일반적인 방식의 LCA 알고리즘으로 구현하면 되는 문제다.

손으로 풀어보기

  1. 인접 리스트로 트리 데이터를 구현한다.

  2. 탐색 알고리즘(DFS 또는 BFS)을 이용해 각 노드의 깊이와 부모 노드를 구한다.(예: LCA(6, 11))

  3. 깊이를 맞추기 위해 더 깊은 노드를 같은 깊이가 될 때까지 부모 노드로 이동한다. 노드 6의 깊이는 2, 노드 11의 깊이는 3으로 깊이가 1만큼 차이나므로 깊이가 3인 11번 노드를 부모 노드인 5번 노드로 이동한다.

  4. 부모 노드로 계속 올라가면서 최소 공통 조상을 찾는다. 한번 더 이동하면 부모 노드가 2로 같아지므로 노드 6과 노드 11의 최소 공통 조상은 2번 노드이다.

img_6.png

슈도코드

코드 구현 - 파이썬

코드 구현 - 자바

Last updated