Notice
Recent Posts
Recent Comments
Link
celina의 이것저것
[C++] 백준 11050번 - 이항 계수1 본문
반응형
문제
자연수 N과 정수 K가 주어졌을 때 이항 계수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 K가 주어진다. (1 ≤ N≤ 10, 0 ≤ K≤ N)
출력
(NK)를 출력한다.
접근
조합을 구하는 문제이다. 조합을 구하는 공식은 이렇다
nCk = n!/k!(n-k)!
반복문을 이용하는 방법과 재귀함수를 이용하는 방법이 있는데 둘다 풀어봤따!
코드
//////////1. 재귀함수를 이용한 방법
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <math.h>
#include <cmath>
using namespace std;
int fac(int num) {
if (num == 0 || num ==1) {
return 1;
}
else {
return fac(num - 1) * num;
}
}
int main() {
int n, k;
scanf("%d %d", &n, &k); //nCk구하기
printf("%d", fac(n) / (fac(k) * fac(n - k)));
return 0;
}
리뷰
조합을 구하는 공식에 팩토리얼이 들어간다 이 팩토리얼을 구하는 함수를 만들어서 최종 출력값에 조합을 구하는 공식을 쓰면 된다
재귀함수를 써서 팩토리얼을 구했다
재귀함수니까 num=3일때 num=2일때를 적어서 풀면 금방 알 수 있다 근데 난 재귀는 늘 헷갈린다. 그래서 아예 적어서 풀어보는편
코드
//////////2.반복문으로 구하기
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <math.h>
#include <cmath>
using namespace std;
int fac(int num) {
int result = 1;
for (int i = num; i > 0; i--) {
result *= i;
}
return result;
}
int main() {
int n, k;
scanf("%d %d", &n, &k); //nCk구하기
printf("%d", fac(n) / (fac(k) * fac(n - k)));
return 0;
}
리뷰
반복문으로 팩토리얼을 구한다. 이것도 그냥 하나씩 적으면서 풀면 쉽게 알 수 있다
출처
https://www.acmicpc.net/problem/11050
11050번: 이항 계수 1
첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\))
www.acmicpc.net
'자료구조&알고리즘 > 백준' 카테고리의 다른 글
[C++] 백준 5576번 - 콘테스트 (1) | 2023.03.20 |
---|---|
[C++] 백준 10814번 - 나이순 정렬 (0) | 2023.03.18 |
[C++] 백준 2460번 - 지능형 기차2 (0) | 2023.03.12 |
[C++] 백준 2798번 - 블랙잭 (0) | 2023.03.12 |
[C++] 백준 1977번 - 완전제곱 (브루트포스 알고리즘) (2) | 2023.03.09 |
Comments