LCA Lowest Common Ancestor (LCA) Tree에서 두 nodes u와 v의 LCA는, root로부터 가장 멀리(deepest) 있는 공통 조상이다. Naive 하게 root에서 각 node까지의 경로를 비교하여 풀 수 있다. 두 배열을 비교하여 얻은 공통 조상 중, root에서 가장 멀리 떨어진 것이 LCA이다. 먼저, u에서 root로 순회하면서 ancestors를 저장한다. v에서 root로 순회할 때, u에서의 ancest... treeLCALCA [백준]3176 도로 네트워크 이 문제에서는 두 도시 사이의 경로가 필요 한 것이 아니라, 두 도시 사이의 경로에서 가장 긴 도로와 가장 짧은 도로만 뭔지 알아내면 됩니다. 그렇기에 a와 (a와 b의 최소 공통 조상) 사이의 최장, 최단 도로를 구하고 b와 (a와 b의 최소공통 조상)사이의 최장, 최단을 구해 두개를 비교해서 출력하면 됩니다. 두 노드번호가 들어오면 두 노드의 깊이를 비교한 후, 깊이가 깊은 노드를 깊이가... cppboj희소 배열백준LCALCA 최소 공통 조상 LCA O(N)만에 찾는 방법과 O(logN)만에 찾는 방법이 있다. O(logN)만에 찾는 방법을 설명하는 것에 중점을 둔 글이므로 Linear하게 찾는 방법은 간단히 설명하고 넘어가겠다. 1. 두 노드의 깊이를 동일하게 맞춰준다. O(logN)에 찾는 방법을 알아보자. O(logN) 만에 찾는 방법에서도 두 노드의 깊이를 동일하게 맞춰주는 과정을 거친다. O(logN) 만에 깊이를 동일하게 맞출... LCA자료구조알고리즘백준최소공통조상LCA [백준]#11438 LCA 2 N(2 ≤ N ≤ 100,000)개의 정점으로 이루어진 트리가 주어진다. 트리의 각 정점은 1번부터 N번까지 번호가 매겨져 있으며, 루트는 1번이다. 두 노드의 쌍 M(1 ≤ M ≤ 100,000)개가 주어졌을 때, 두 노드의 가장 가까운 공통 조상이 몇 번인지 출력한다. 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가... 백준LCAalgorithmDPDP [백준]#11812 K진 트리 각 노드가 자식을 최대 K개 가질 수 있는 트리를 K진 트리라고 한다. 총 N개의 노드로 이루어져 있는 K진 트리가 주어진다. 트리는 "적은 에너지" 방법을 이용해서 만든다. "적은 에너지" 방법이란, 이전 깊이를 모두 채운 경우에만, 새로운 깊이를 만드는 것이고, 이 새로운 깊이의 노드는 가장 왼쪽부터 차례대로 추가 한다. 아래 그림은 노드 9개로 이루어져 있는 3진 트리이다. 노드의 개수... algorithmLCA백준LCA 백준 3584, 가장 가까운 공통 조상 - Tree, DFS, DP, LCA (Lowest Common Ancestor) 입력 트리 노드 정보가 "부모 노드 - 자식 노드" 형태로 주어짐 1) 모든 노드의 깊이, 2^0 번째 부모 (직계 부모) 저장 2) 모든 노드의 2^i 번째 부모 저장 DP 배열 (Sparse Table): int[][] parent = new int[n][21]; n: 트리 노드 개수, 21: 트리 깊이 20이면 충분 parent[nodeIdx][i]: 노드의 2^i 번째 부모 노드의 2... 깊이 우선 탐색Lowest Common Ancestor백준 3584 가장 가까운 공통 조상알고리즘최소 공통 조상dynamic programming코딩 테스트tree그래프 탐색depth first search트리DFS다이나믹 프로그래밍DPLCADFS
Lowest Common Ancestor (LCA) Tree에서 두 nodes u와 v의 LCA는, root로부터 가장 멀리(deepest) 있는 공통 조상이다. Naive 하게 root에서 각 node까지의 경로를 비교하여 풀 수 있다. 두 배열을 비교하여 얻은 공통 조상 중, root에서 가장 멀리 떨어진 것이 LCA이다. 먼저, u에서 root로 순회하면서 ancestors를 저장한다. v에서 root로 순회할 때, u에서의 ancest... treeLCALCA [백준]3176 도로 네트워크 이 문제에서는 두 도시 사이의 경로가 필요 한 것이 아니라, 두 도시 사이의 경로에서 가장 긴 도로와 가장 짧은 도로만 뭔지 알아내면 됩니다. 그렇기에 a와 (a와 b의 최소 공통 조상) 사이의 최장, 최단 도로를 구하고 b와 (a와 b의 최소공통 조상)사이의 최장, 최단을 구해 두개를 비교해서 출력하면 됩니다. 두 노드번호가 들어오면 두 노드의 깊이를 비교한 후, 깊이가 깊은 노드를 깊이가... cppboj희소 배열백준LCALCA 최소 공통 조상 LCA O(N)만에 찾는 방법과 O(logN)만에 찾는 방법이 있다. O(logN)만에 찾는 방법을 설명하는 것에 중점을 둔 글이므로 Linear하게 찾는 방법은 간단히 설명하고 넘어가겠다. 1. 두 노드의 깊이를 동일하게 맞춰준다. O(logN)에 찾는 방법을 알아보자. O(logN) 만에 찾는 방법에서도 두 노드의 깊이를 동일하게 맞춰주는 과정을 거친다. O(logN) 만에 깊이를 동일하게 맞출... LCA자료구조알고리즘백준최소공통조상LCA [백준]#11438 LCA 2 N(2 ≤ N ≤ 100,000)개의 정점으로 이루어진 트리가 주어진다. 트리의 각 정점은 1번부터 N번까지 번호가 매겨져 있으며, 루트는 1번이다. 두 노드의 쌍 M(1 ≤ M ≤ 100,000)개가 주어졌을 때, 두 노드의 가장 가까운 공통 조상이 몇 번인지 출력한다. 첫째 줄에 노드의 개수 N이 주어지고, 다음 N-1개 줄에는 트리 상에서 연결된 두 정점이 주어진다. 그 다음 줄에는 가... 백준LCAalgorithmDPDP [백준]#11812 K진 트리 각 노드가 자식을 최대 K개 가질 수 있는 트리를 K진 트리라고 한다. 총 N개의 노드로 이루어져 있는 K진 트리가 주어진다. 트리는 "적은 에너지" 방법을 이용해서 만든다. "적은 에너지" 방법이란, 이전 깊이를 모두 채운 경우에만, 새로운 깊이를 만드는 것이고, 이 새로운 깊이의 노드는 가장 왼쪽부터 차례대로 추가 한다. 아래 그림은 노드 9개로 이루어져 있는 3진 트리이다. 노드의 개수... algorithmLCA백준LCA 백준 3584, 가장 가까운 공통 조상 - Tree, DFS, DP, LCA (Lowest Common Ancestor) 입력 트리 노드 정보가 "부모 노드 - 자식 노드" 형태로 주어짐 1) 모든 노드의 깊이, 2^0 번째 부모 (직계 부모) 저장 2) 모든 노드의 2^i 번째 부모 저장 DP 배열 (Sparse Table): int[][] parent = new int[n][21]; n: 트리 노드 개수, 21: 트리 깊이 20이면 충분 parent[nodeIdx][i]: 노드의 2^i 번째 부모 노드의 2... 깊이 우선 탐색Lowest Common Ancestor백준 3584 가장 가까운 공통 조상알고리즘최소 공통 조상dynamic programming코딩 테스트tree그래프 탐색depth first search트리DFS다이나믹 프로그래밍DPLCADFS