SWEA 1266. [S/W 문제해결 응용] 9일차 - 소수 완제품 확률
문제 링크
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18Sx36IwACFAZN
C++ 풀이
#include <iostream>
#include <cmath>
using namespace std;
//n개 중에 r개를 뽑는 조합 수 구하기(nCr = n-1Cr-1 + n-1Cr)
int cal_comb(int n, int r) {
if (r == 0 || n == r)
return 1;
else
return cal_comb(n - 1, r - 1) + cal_comb(n - 1, r);
}
//완제품을 만들 확률 구하기
//(만들 확률^만드는 개수) * (못만들 확률^못만드는 개수) * 18개중 n개 뽑는 경우의 수(18Cn)
double cal_prob(int &prob, int num) {
return pow(prob / 100.0, num) * pow((100.0 - prob) / 100.0, 18 - num) * cal_comb(18, num);
}
int main() {
int T;
cin >> T;
for (int i = 1; i <= T; ++i) {
int a, b;
cin >> a >> b;
double A_val = 0.0, B_val = 0.0;
A_val = cal_prob(a, 0) + cal_prob(a, 1) + cal_prob(a, 4)
+ cal_prob(a, 6) + cal_prob(a, 8) + cal_prob(a, 9)
+ cal_prob(a, 10) + cal_prob(a, 12) + cal_prob(a, 14)
+ cal_prob(a, 15) + cal_prob(a, 16) + cal_prob(a, 18);
B_val = cal_prob(b, 0) + cal_prob(b, 1) + cal_prob(b, 4)
+ cal_prob(b, 6) + cal_prob(b, 8) + cal_prob(b, 9)
+ cal_prob(b, 10) + cal_prob(b, 12) + cal_prob(b, 14)
+ cal_prob(b, 15) + cal_prob(b, 16) + cal_prob(b, 18);
// 1 - (A와 B 둘 다 소수가 아닌 개수의 완제품을 만들 확률)
printf("#%d %.6f\n", i, 1.0 - (A_val * B_val));
}
return 0;
}
조합과 확률을 계산하여 풀이하였다.
두 사람이 만든 완제품의 수가 최소 한 명이라도 소수일 확률을 구해야하기 때문에
전체 확률(1) - (A와 B 두 사람 다 소수가 아닌 개수의 완제품을 만들 확률) 을 구하였다.
반응형
'알고리즘 · 코딩' 카테고리의 다른 글
[SWEA 1213] String (0) | 2021.10.20 |
---|---|
[SWEA 1245] 균형점 (0) | 2021.10.20 |
[SWEA 1206] View (0) | 2021.10.18 |
[SWEA 1240] 단순 2진 암호코드 (0) | 2021.10.18 |
[백준 2606번] 바이러스 (0) | 2021.10.15 |