본문 바로가기

Algorithm15

Edmonds-Karp 설명은 추후 업로드 // Algorithm Analysis // 네트워크 플로우 (Network Flow) #include #include #include #define MAX 100 #define INF 1000000000 using namespace std; int n = 6; int result; int cap[MAX][MAX]; // 용량 int flow[MAX][MAX]; // 현재 사람의 수 int vtd[MAX]; // 현재 장소 방문 여부 vector a[MAX]; // 최대 사람의 수 계산 void maxFlow(int s, int e) { while (1) { fill(vtd, vtd + MAX, -1); queue q; q.push(s); while (!q.empty()) { int .. 2023. 8. 29.
memoization 기법을 이용한 피보나치 수열 #include using namespace std; long long memo[100]; long long fib(int n) { if(n> n; cout n; cout n; memo.push_back(0); memo.push_back(1); cout 2023. 6. 26.
탐구활동 2 입력된 두 양의 정수의 공약수를 모두 출력하는 프로그램을 작성해 보자. (예를 들어 8 24와 같이, 두 개의 양의 정수가 입력되었을 때에는 1 2 4 8이 출력되어야 한다.) 해설 더보기 두 정수를 받을 때 각 변수를 a, b라 하자. 이때 일반성을 잃지 않고 a≤b라고 가정하면 반복문을 1부터 a까지 돌리면서(이때 해당하는 값을 i라 하자.) 0 ≡ i (mod a), 0 ≡ i (mod b)를 만족하는 i를 모두 출력하면 된다. (∵ a보다 큰 값에 대해서는 a의 약수에 해당하는 수가 존재하지 않기 때문에 반복문을 1부터 a까지만 돌려줘도 된다.) 하지만 ab이면 a와 b의 값을 swap 해주는 코드도 작성한다. 코드 더보기 #include using namespace std; int f_swap(.. 2023. 4. 7.
탐구 활동 1 입력된 값 이하의 자연수들 중에서 가장 많은 약수를 가지는 자연수와 그 개수를 출력하는 프로그램을 작성해 보자. (단, 약수의 개수가 같다면 해당 자연수를 모두 출력한다.) 해설 더보기 문제 해결 전략: 동적으로 메모리를 할당할 수 있는 vector 자료형을 사용한다. 문제의 목적을 파악하자면 문제에서 구하고자 하는 것은 입력된 값 이하의 자연수 중 약수의 개수가 가장 많은 자연수를 모두 출력하고, 그 갯수를 출력하는 것이다. 따라서 동적으로 메모리 할당이 가능한 vector 자료형 num변수에 입력값 이하의 자연수를 모두 넣어주고, 보통 약수의 개수를 구하듯이 구한 다음 약수의 개수의 최댓값과 약수의 개수가 동일한 자연수가 나오면 vector 자료형 n 변수에 그 값을 넣고, 이미 구해둔 약수의 개수의.. 2023. 4. 7.