알고리즘/백준
-
[백준] 12752번 - 도시들알고리즘/백준 2025. 1. 4. 23:31
문제https://www.acmicpc.net/problem/12752 풀이특별한 알고리즘은 없고, 단순 다익스트라 문제이다.많은 도시들이 있고 그 중 K(K 1. K = 1도로가 필요 없음 2. K = 2두 개의 도시를 연결하는 최소 비용을 구하면 된다. 간단하게 다익스트라 1번으로 구할 수 있다. 3. K = 3아래와 같은 경우들이 있을 수 있다. 각 점에서 출발해서 어떤 점에서 만난다고 생각하면 쉽다. K개의 도시(0, 1, 2 정점) N개의 정점에서 만나는 경우 중 비용 합의 최소 값을 구한다.A정점에서 만나는 경우: cost[0][A] + cost[1][A] + cost[2][A]B정점에서 만나는 경우: cost[0][B] + cost[1][B] + cost[2][B]... 4. K =..
-
[백준] 5670번 - 휴대폰 자판알고리즘/백준 2024. 12. 22. 04:30
문제https://www.acmicpc.net/problem/5670 풀이Trie: https://doraeul19.tistory.com/415전형적인 트라이 문제, 근데 입출력 형식이 여러개의 TC이므로 while(cin >> N)으로 입력받자Insert함수를 구현해서 트리를 잘 만들어주고, Find함수에서 자판을 눌러야하는 횟수를 더해가면 된다. 자판을 눌러야 하는 경우1. 맨 처음 글자: 첫 번째 글자는 무조건 눌러야 한다.2. 다른 문자열과 구분되지 않는 경우 - 현재 문자가 isEnd(다른 문자열의 끝인 경우) - 다음 문자로 올 수 있는 경우가 2개 이상인 경우 코드#include #include #include #include #include #include #include #in..
-
[백준] 1854 - K번째 최단경로 찾기알고리즘/백준 2024. 12. 7. 19:55
문제https://www.acmicpc.net/problem/1854 풀이방법만 알면 쉬운 문제, k 번째의 최단 거리를 구하면 된다.기본 다익스트라를 조금 변형하면 된다.우선순위 큐에 거리를 push하면서 진행하면 된다. K 코드더보기#include #include #include #include #include #include #include #include #include #include using namespace std;int N, M, K;struct Node { int n; long long c; bool operator o.c; }};vector graph[1001];priority_queue pq;priority_queue ret[1001];int main() { ios::sync_wi..
-
[백준] 11437 - LCA알고리즘/백준 2024. 11. 27. 23:06
문제https://www.acmicpc.net/problem/11437 설명문제 이름부터 나 LCA 문제입니다. 라고 하고 있는 문제시간 제한도 3초라 O(N)에 대해 돌면서 조상을 구해도 문제 없다.구현자체는 트리에서 level을 구하고 서로 만날 때 까지 올라가면 된다. parse table에 부모를 저장하면서 O(logN)으로 돌 수 있는데, 이 부분은 나중에 다시... 코드#include #include #include #include #include #include #include using namespace std;int N, M;vector graph[50001];int level[50001];int parent[50001];queue q;void lca(int a, int b) { ..
-
[백준] 2679번 - 맨체스터의 도로알고리즘/백준 2024. 9. 17. 17:31
문제https://www.acmicpc.net/problem/2679Network Flow + DFS 'A에서 B로 가는 중복 비율은 A에서 B로 가는 모든 길을 동시에 이용했을 때 1시간 동안 B에 도착할 수 있는 차의 최대 개수와 길 1개를 이용했을 때 도착할 수 있는 최대 개수의 비율이다.' A. A에서 B로 가는 모든 길을 동시에 이용하는 경우B. 길 1개를 이용했을 때 도착할 수 있는 경우A / B를 구하시오. 원문이 번역된 문제라, 뭔 소리인가 몇 번 읽어봤다. A는 최대유량을 구하라는 의미이고, B는 최대유량으로 구해지는 source->sink의 경로 중 하나에 대한 최대유량을 의미한다. B의 경우에는 최대유량, 다익스트라 돌려보다 결국 DFS로 다 돌렸다.해당 길을 이루는 간선들 중 최소..
-
[백준] 18135번 - 겨울나기알고리즘/백준 2024. 9. 12. 00:18
https://www.acmicpc.net/problem/18135 생각 없이 풀었다가 당황한 문제칸에 대해 저장하는 것이 아니라, 칸으로 이루어진 각 영역에 대해 도토리를 저장한다.칸을 각 영역으로 한 번 매핑해서 풀어줬다. 나머지는 Lazy-Seg..., 코드가 길어서 실수가 많음, 좀 만 안풀어도 잊혀져버릴듯.#include#include #include #include #include #include #include using namespace std;int N, M;vector tree;vector lazy;int num[2000001];long long arr[1000001];long long Make(int node, int start, int end) { if (start == end..
-
메모장.알고리즘/백준 2024. 8. 28. 23:37
백트래킹, DFS, BFS, Dijkstra, 이분탐색, 슬라이딩윈도우, 투포인터, 삼분탐색 - 이거 안풀어봄 DPLCS, LIS, 냅섹nlogn 가장 긴 증가하는 부분 수열 기하CCW(Counter Clock Wise)선분교차판정Convex hull(볼록껍질)회전하는 캘리퍼스 - 이건 보다 맘 그래프최대유량(Network Flow)SPFA(Shortest Path Faster Algorithm)MCMF(최소비용최대유량) SCC(강한연결요소) 자료구조SegmentLazy-Segment
-
[백준] 16975번 - 수열과 쿼리 21알고리즘/백준 2024. 8. 28. 23:22
가끔 풀다보면 간간히 보이는 Lazy Segment 문제세그먼트 트리에서 특정 구간에 대해 업데이트를 Lazy하게 해준다. 나중에 시간나면 따로 정리하면 좋을 듯 문제https://www.acmicpc.net/problem/16975 코드#include #include #include #include #include #include #include #include using namespace std;int N, M;long long arr[100000];vector tree;vector lazy;long long Make(int node, int start, int end){ if (start == end) { tree[node] = arr[start]; return tre..