본문 바로가기

알고리즘 · 코딩

[SWEA 1266] 소수 완제품 확률

SWEA 1266. [S/W 문제해결 응용] 9일차 - 소수 완제품 확률

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18Sx36IwACFAZN 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


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 두 사람 다 소수가 아닌 개수의 완제품을 만들 확률) 을 구하였다.

 

 

LIST

'알고리즘 · 코딩' 카테고리의 다른 글

[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