전체 방문자
오늘
어제
모달조아
Better than yesterday
모달조아
  • 분류 전체보기 (147)
    • PS (86)
      • BOJ (79)
      • 프로그래머스 (6)
    • 이론 (41)
      • 자료구조 (2)
      • 알고리즘 (8)
      • 데이터베이스 (1)
      • 운영체제 (1)
      • 네트워크 (3)
      • 디자인패턴 (7)
      • Java (13)
      • Spring (4)
      • JPA (1)
      • Git (1)
    • 개발 (18)
    • 프로젝트 (1)
    • 기록 (0)
      • 후기 (0)
    • etc (1)

최근 글

티스토리

hELLO · Designed By 정상우.
모달조아

Better than yesterday

PS/BOJ

BOJ 1344 축구 [Java]

2022. 9. 15. 21:03

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
    'PS/BOJ' 카테고리의 다른 글
    • BOJ 11067 모노톤길 [Java]
    • BOJ 1939 중량제한 [Java]
    • BOJ 15685 드래곤 커브 [Java]
    • BOJ 14499 주사위 굴리기 [Java]
    모달조아
    모달조아

    티스토리툴바