[Algorithm] 스케쥴링, Scheduling
백준 문제를 풀면서 스케쥴링과 관련된 알고리즘을 정리한다. 크게 DP, DFS, Stack를 활용한 문제가 있었다. 문제 유형은 최대 효율, 최대 동시 점유 수, 횟수 최소화 등 최적화(효율)와 관련된 문제들이다. https://www.acmicpc.net/problem/19598 19598번: 최소 회의실 개수 2개 회의실로 3개 회의를 모두 진행할 수 있다. 예를 들어, 첫번째 회의실에서 첫번째 회의를 진행하고 두번째 회의실에서 두번째 회의와 세번째 회의를 진행하면 된다. 1개 회의실로 3개 회의 www.acmicpc.net https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.ac..
2023. 2. 2.
[Algorithm] Minimum Spanning Tree - Kruscal
최소 신장 트리(MST)를 찾는 알고리즘으로 Union-Find 아이디어를 활용한다. Union-Find 란 disjoint set을 찾기 위한 아이디어 이다. 전반적인 아이디어는 다음과 같고, 알고리즘은 아래 코드에서 확인하면 된다. Union(a, b): a, b 노드가 연결되어 있다면 a 가 b를 연결시킨다. 즉, a = 1과 b=2가 연결되어 있다면 unf[a] = b 이다. 이때, unf[ ] 는 연결된 노드를 표시하기 위한 배열이고, 자기 자신을 가리키도록 초기화 된다. 즉, unf[1] = 1, unf[2]=2, unf[3]=3 .... unf[n]=n 이다. 1 과 2 노드를 Union 시키기 위해, 각 노드가 가리키는 루트노드를 찾는 Find(n) 재귀 함수를 실행한다. Find 재귀함수..
2023. 1. 19.
[Algorithm] 연속된 자연수 합
풀이 자연수 n을 자기자신을 제외한 연속된 자연수의 합으로 표현할 수 있는 수식을 찾는 알고리즘. 15를 표현한다면, 7+8 = 15, 4+5+6 = 15, 1+2+3+4+5 = 15, 세 가지 수식으로 표현 가능하다. 이때, 2자리로 표현하는 경우는 (15 - (1+2)) / 2 = 6 (1+6) + (2+6) = 7+8 = 15 이다. 3자리는 (15 - (1+2+3)) / 3 = 3 (1+3) + (2+3) + (3+3) = 4+5+6 = 15 이다. 1부터 연속한 자연수의 합을 제외하고 남은 수를, 각 수에 동등하게 배분하여 해결할 수 있다. #include int main() { int a, b=1, cnt=0, tmp, i; scanf("%d", &a); tmp=a; // 1 빼기 a--; w..
2023. 1. 16.