BOJ 1344 축구
1. 문제 링크
https://www.acmicpc.net/problem/1344
2. 문제 해설
중고등학교 때 배웠던 확률 문제이다. 90분까지 5분 간격으로 구간을 나누므로 총 구간의 수는 18개이다.
A팀이 구간에서 골을 넣을 확률을 a라고 한다면,
경기 종료까지 A팀이 r골을 넣을 확률 = 18구간 중 골을 넣을 r개의 구간을 선택하는 경우의 수 x 선택된 경우의 수에서 r골을 넣을 확률
= 18Cr x a^r x (1-a)^(18-r) 이다.
18까지의 숫자 중 소수는 2, 3, 5, 7, 11 ,13, 17이므로 위 식에 적용하여 각 팀이 소수로 득점할 확률을 구할 수 있다.
A, B팀 중 적어도 한 팀이 골을 소수로 득점할 확률 = A팀이 소수로 득점할 확률 + B팀이 소수로 득점할 확률 - A, B팀이 모두 소수로 득점할 확률이다.
3. 코드 보기
import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); double A = Double.parseDouble(br.readLine()) / 100.0; double B = Double.parseDouble(br.readLine()) / 100.0; double[] perA = new double[19]; // perA[i] = A팀이 i골을 넣을 확률 double[] perB = new double[19]; perA[1] = combination(18, 1) * Math.pow(A, 1) * Math.pow((1.0 - A), 17); perB[1] = combination(18, 1) * Math.pow(B, 1) * Math.pow((1.0 - B), 17); for (int i = 2; i < 19; i++) { perA[i] = combination(18, i) * Math.pow(A, i) * Math.pow((1.0 - A), 18 - i); perB[i] = combination(18, i) * Math.pow(B, i) * Math.pow((1.0 - B), 18 - i); } double primePerA = perA[2] + perA[3] + perA[5] + perA[7] + perA[11] + perA[13] + perA[17]; double primePerB = perB[2] + perB[3] + perB[5] + perB[7] + perB[11] + perB[13] + perB[17]; double answer = primePerA + primePerB - primePerA * primePerB; bw.write(Double.toString(answer)); br.close(); bw.flush(); bw.close(); } static int combination(int n, int r) { if (r == 0 || r == n) { return 1; } return combination(n - 1, r - 1) + combination(n - 1, r); } }
'PS > BOJ' 카테고리의 다른 글
BOJ 11067 모노톤길 [Java] (1) | 2022.09.13 |
---|---|
BOJ 1939 중량제한 [Java] (0) | 2022.09.03 |
BOJ 15685 드래곤 커브 [Java] (0) | 2022.04.06 |
BOJ 14499 주사위 굴리기 [Java] (0) | 2022.03.19 |
BOJ 14891 톱니바퀴 [Java] (0) | 2022.03.14 |