[PS] 백준3584: 가장 가까운 공통 조상 (Java)
CS/알고리즘2025. 1. 12. 19:02[PS] 백준3584: 가장 가까운 공통 조상 (Java)

문제https://www.acmicpc.net/problem/3584 풀이해시 + 그래프 탐색접근법“공통 조상” 이라는 키워드만 보고서는 유니온 파인드를 생각했습니다.그러나 “가장 가까운 공통 조상(Nearest Common Ancestor)”을 구하는 문제로써 Union-Find로 구할 시 루트노드가 나오기에 다른 방식으로 접근했습니다. 두 정점의 부모 노드만 탐색하면 되었기에 일반적인 그래프 탐색을 통해서 접근했습니다. (시간복잡도↓)트리 자료구조로는 인접리스트를 활용했고, 자식 노드가 아닌 부모 노드를 탐색해야 했기에 부모를 기준으로 자식노드를 담는게 아닌 자식 노드를 기준으로 부모 노드를 담았습니다.list.get(부모).add(자식) → list.get(자식).add(부모)a와 b 노드의 공통되..

[알고리즘] Union-Find (부제 : 좌표 압축은 왜?)
CS/알고리즘2024. 12. 3. 05:16[알고리즘] Union-Find (부제 : 좌표 압축은 왜?)

Union-Find?분리 집합이라고도 불리는 유니온 파인드는 그래프 형태의 자료구조에서 정점들의 연결 정보를 알고 싶을 때 사용하는 알고리즘입니다.분리 집합이라고 불리는 이유는 서로 연결된 정점들을 각각의 집합으로 만들기 때문입니다. DFS(BFS) VS Union Find그래프 형태의 자료에서 연결 정보를 알고 싶을 때 DFS, BFS 탐색을 통해서도 알 수 있습니다.그러나 서로 다른 모든 정점의 연결정보를 구하려면 시간이 오래 걸릴 수 밖에 없습니다.10만개의 정점이 있고, 모든 정점이 서로 연결되있을수도 있다면 두 정점의 연결관계를 탐색하는데 최대 10만번의 탐색이 이루어질 수 있기 때문입니다.또한 이러한 연결관계 탐색이 N번 필요하다면 O(N^2)의 시간이 필요합니다. Union Find를 사용하..

CS/알고리즘2024. 11. 26. 23:34[자료구조] 트리의 특성과 종류, 구현

그래프그래프는 정점(Vertex)과 간선(Edge)으로 이루어진 자료구조여러 요소(정점) 간의 관계를 나타내기 위해 사용구성요소로는 정점, 간선, 가중치가 있음.분류방향 그래프(Directed Graph): 간선에 방향이 있습니다. (A,B)는 A→B를 의미하며, B→A는 별개의 간선으로 취급됩니다.무방향 그래프(Undirected Graph): 간선에 방향이 없으며 (A,B)와 (B,A)가 동일합니다.가중치 그래프(Weighted Graph): 간선에 가중치가 포함된 그래프입니다.비가중치 그래프(Unweighted Graph): 간선에 가중치가 없는 그래프입니다.트리계층적 구조를 표현하는 특수한 형태의 그래프무방향이면서 사이클이 없는 연결 그래프임의의 두 정점을 연결하는 Simple Path가 유일한 ..

[회고] 지난 문제를 다시 풀어보며, 좋은 코드에 대해
CS/알고리즘2024. 11. 22. 22:26[회고] 지난 문제를 다시 풀어보며, 좋은 코드에 대해

글을 작성하는 이유최근 문제를 풀면서 키워드 유추 -> 접근법 생각 -> 검증 -> 코드로 구현 순으로 풀이를 진행하는 연습을 하고 있습니다.이 과정에서 접근법에 대해 코드로 구현하는게 잘 되지 않는다고 느껴져서 이유를 생각해보고, 어떻게 개선해나갈지 정리하고자 글을 작성하게 되었습니다. 참고 문제https://school.programmers.co.kr/learn/courses/30/lessons/77886  키워드 유추0과 1로 이루어진 어떤 문자열 xx를 최대한 사전 순으로 앞에 오도록x에 있는 "110"을 뽑아서임의의 위치에 삽입접근법 생각문자열 x에서 "110"을 추출추출 후 남은 문자열에 대해서도 계속해서 추출최종적으로 남은 문자열에서 마지막 0의 위치를 탐색추출한 "110"을 순차적으로 마지..

image