알고리즘
-
[Algorithm] MST, Minimun Spanning Tree알고리즘/Algorithm Theory 2024. 2. 21. 10:38
- MST : 그래프의 모든 정점을 연결하는 최소 비용 트리 1) Kruskal 크루스칼 - 간선들을 가중치를 기준으로 오름차순 정렬 - 사이클이 생기지 않는 간선을 (정점의 개수 - 1) 개 만큼 뽑아냄 2) Prim 프림 - 최소 힙을 사용하여, 각 정점으로 부터 최소 간선을 선택해나감 - 크루스칼 알고리즘 - 크루스칼 구현 #include #include #include using namespace std; int N = 5; struct Node { int a, b; int price; }; vector line; int arr[10]; bool compare(Node t, Node v) { return t.price < v.price; } void Init() { for (int i = 0; i..
-
[Algorithm] Union-Find알고리즘/Algorithm Theory 2024. 2. 20. 11:34
- Disjoint-Sets (서로소 집합들) 교집합이 존재하지 않는 집합 - UnionFind 로 해결 가능한 문제 - 특정 집합에 몇 개의 원소가 속해있는지 - 특정 원소가 같은 집합에 속해있는지 https://www.acmicpc.net/problem/10775 https://www.acmicpc.net/problem/1717 - Union 연산과 Find 연산 1. union(A, B) : B가 A의 밑으로 들어감, A와 B가 같은 조직이됨. find(B) : B의 최상위 부모를 찾음 = A 2. union(C, D) : D가 C의 밑으로 들어감, C와 D가 같은 조직이됨. 3. union(D, B) : B가 D의 밑으로 들어감, - UnionFind의 저장 각 - 코드 구현 #include us..
-
[백준] 30826번 그 긴 수알고리즘/백준 2024. 2. 9. 04:42
https://www.acmicpc.net/problem/30826 30826번: 그 긴 수 팰린드롬 수는 앞에서 읽어도, 뒤에서 읽어도 같은 수를 말한다. 예를 들어, $7$, $88$, $14641$은 팰린드롬 수지만 $201$, $329$, $4700$ 등은 팰린드롬 수가 아니다. 상윤이는 팰린드롬 수 중 양의 정수면 www.acmicpc.net Ad Hoc 문제, 저번의 거울 숫자 문제와 비슷한가? 싶어서 건드려 보았는데, 그냥 각 경우를 고려해서 잘 짜주면 된다. - 문제 요약 팰린드롬 수를 순차적으로 계속 붙여나간 수에서 K 번 째 위치한 수를 찾아주면 된다. Ex. 12345678911223344556677 ... - 각 자리 수 마다 팰린드롬 수를 만들 수 있는 경우의 수 한자리 수의 경우..
-
[BFS] Priority Queue 활용 BFS알고리즘/백준 2024. 2. 8. 13:52
일명 물 채우기 BFS 문제 물을 담아두기 위해서, 테두리부터 물을 흘려 보낸다는 아이디어가 필요하다. - 알고리즘 0. 한 번 추가됬던 칸은 check. 1. 테두리를 우선순위 큐에 추가 2. 우선순위 큐에서 하나씩 pop 하면서, 주변 탐색 3. 주변 탐색 시, 더 낮은 높이면 해당 칸으로 나아가 탐색을 진행하고, 아니면 우선순위 큐에 추가 4. 탐색 시에는 처음에 우선순위 큐에서 pop 한 칸의 높이를 기준으로 탐색 - 예시 문제 1. 수영장 사장님 : https://www.acmicpc.net/problem/15730 2. 물 채우기 : https://www.acmicpc.net/problem/2276 - 수영장 사장님 Code #include #include #include #include us..
-
[Algorithm] 다익스트라알고리즘 2024. 2. 2. 11:24
최단 경로 (BFS) - 그래프에 가중치가 서로 같은 경우 최단 거리 (Dijkstra) - 그래프에 가중치 같이 포함, 정점 A 에서 다른 N 개의 정점에 대한 최소 비용을 구함 가중치가 있는 그래프에서 최소 비용 구하기 BFS와 매우 유사하지만, Queue를 사용하는 것이 아닌, PriorityQueue를 통해 인접 정점이 아닌 거리가 제일 짧은 간선을 뽑아낸다. Dijkstra Algorithm - 각 순간 마다 가장 작은 비용을 선택하면서, 정답 배열과 비교 파란색: Priority Queue 주황색: 정답배열 Code #include #include #include #include #include using namespace std; struct Edge { int num; int cost; /..
-
[Algorithm] priority_queue알고리즘 2024. 2. 1. 12:00
1. priority_queue : 완전이진트리 (complete binary tree) 2. heapify : 직접 연결되어 있는 노드끼리 비교해서, - max heap 기준 : 큰 값을 위로 올린다. - min heap 기준 : 작은 값을 위로 올린다. - Ex. heapify 3. priority_queue 와 algorithm의 sort 정렬 차이 똑같이 less 정렬 시, heapq(priority_queue)는 내림차순으로 정렬되고, sort 정렬 시, vector가 오름차순으로 정렬됨을 볼 수 있다. priority_queue는 less 와 같이 사용하고, sort는 less() 와 같이 사용한다. #include #include #include #include using namespace ..
-
[Algorithm] Flood Fill (+BFS)알고리즘 2024. 1. 31. 09:43
Flood Fill - 흘러넘치다, 채우다. - 다차원 배열에서 시작점과 연결된 영역들을 찾는 알고리즘 - 2차원 이상의 배열에서 이루어지는 BFS - 즉 특정 좌표 (y, x) 상에 있는 노드 기준으로 BFS 탐색하는 방법 * Ex. 지도 상에서 최단 경로를 구할 때 BFS 설계 1. 큐 생성 2. 시작점을 큐에 push() 3. 큐 맨앞의 값을 확인 front() 4. pop() 5. 다음 경로들 탐색 6. 다음 경로들을 큐에 push() 7. 3 ~ 6 과정 반복 Flood Fill Example Code - BFS와 동일하지만, 노드로 (y, x) 좌표를 가진다. - 또한 방향 배열을 통해 퍼져나갈 영역을 정의해두고 탐색한다. * C++에서는 struct 키워드를 생략가능 #include #inc..