알고리즘 문제풀기/인프런 강의 정답
76. 이항계수(메모이제이션)
코다람쥐
2022. 5. 25. 23:47
나의정답1. 공식1사용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
int fac(int n) {
if (n == 1) return 1;
return n * fac(n - 1);
}
int nCr(int n, int r) {
return fac(n) / (fac(r) * fac(n - r));
}
int main(int argc, char** argv) {
//freopen("input.txt", "rt", stdin);
int n, r;
scanf("%d %d", &n, &r);
printf("%d\n", nCr(n, r));
}
나의정답2. 공식2사용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
int nCr(int n, int r) {
if (r == 0 || n == r) return 1;
return nCr(n - 1, r - 1) + nCr(n - 1, r);
}
int main(int argc, char** argv) {
//freopen("input.txt", "rt", stdin);
int n, r;
scanf("%d %d", &n, &r);
printf("%d\n", nCr(n, r));
}
나의정답3. 메모이제이션 이용
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
int dy[21][21] = { 0 };
int nCr(int n, int r) {
if (dy[n][r] > 0) return dy[n][r];
if (r == 0 || n == r) return 1;
return dy[n][r] = nCr(n - 1, r - 1) + nCr(n - 1, r);
}
int main(int argc, char** argv) {
//freopen("input.txt", "rt", stdin);
int n, r;
scanf("%d %d", &n, &r);
printf("%d\n", nCr(n, r));
}