"the only way to be truly satisfied is to do what you believe is great work."

[Python] 백준 1344번 : 축구

https://www.acmicpc.net/problem/1344

 

1344번: 축구

홍준이는 축구 경기를 보고 있다. 그러다가 홍준이는 역시 두 팀 중 적어도 한 팀이 골을 소수로 득점할 확률이 궁금해 졌다. 축구 경기는 90분동안 이루어지고, 분석을 쉽게하기 위해서 경기를 5

www.acmicpc.net

sosu = [2,3,5,7,11,13,17]

def bin_A(k):
    global P_a
    if k == 18 :  # 여기에서 경우의 수 하나가 출력 된다.
        if sum(Goal) not in sosu:  #이 경우의 수에서 득점이 아니라면,
            Possibility = 1               # 1에 누적곱을 하며 이 경우의 수에서의 확률을 구한다.
            for i in range(18):
                if Goal[i]:           # R이 1이라면 A를
                    Possibility *= A
                else:
                    Possibility *= (1-A)    # R이 9이라면 (1-A)를 곱해야 한다.
            # print(Goal,Goal(R),Possibility)
            P_a += Possibility   # A팀 득점이 소수가 아닌 경우의 수의 확률
        return
    else:
        Goal[k] = 0
        bin_A(k+1)
        Goal[k] = 1
        bin_A(k+1)

def bin_B(k):
    global P_b
    if k == 18:
        if sum(Goal) not in sosu:
            Possibility = 1
            for i in range(18):
                if Goal[i]:
                    Possibility *= B
                else:
                    Possibility *= (1 - B)
            # print(Goal, sum(Goal), Possibility)
            P_b += Possibility
        return
    else:
        Goal[k] = 0
        bin_B(k + 1)
        Goal[k] = 1
        bin_B(k + 1)

A = (float(input()))/100
B = (float(input()))/100

Goal = [-1]*18
P_a,P_b = 0,0  #각각, 팀 A와 B가 non소수로 득점할 확률
bin_A(0)
bin_B(0)
print(1-P_a*P_b)   #1에서 A팀이 non소수로 득점할 확률과 B팀이 non 소수를 득점할 확률을 동시에 뺀다.

A팀과 B팀 적어도 한팀이 소수만큼 득점할 확률 = 1 - (A팀과 B팀이 동시에 소수가 아닌수를 득점할 확률)

 

A팀과 B팀이 동시에 소수가 아닌수를 득점할 확률 = (A팀이 소수를 득점할 확률)*(B팀이 소수를 득점할 확률) 

 

A팀과 B팀이 득점하는 것은 독립사건이기 때문에 곱연산을 한다

 

이제 각 팀이 득점을 할 확률을 구하기만 하면 된다.

 

90분을 5분으로 나누었기 때문에 18개의 회가 존재하고(마치 야구처럼) 각 회에는 득점을 하거나 안하는 경우의 수만

존재하기 때문에 , 1과 0으로 나타낼 수 있다.

 

마치 101010100001011000... 처럼 ..

 

이게 한가지 경우의 수인 것이다.

 

근데 여기서 1을 다 더하면 그 경우의 수에서 해낸? 득점을 알 수 있다.

 

그러면 득점이 소수가 아닌 경우의 수만 선별 해내면 된다.

 

그리고 그 경우의 수 마다 확률을 구하고 다 더해주면 된다.

 

B팀에서도 같은 방법으로 구하면 된다.

'알고리즘 > 백준' 카테고리의 다른 글

[C++] 백준11660: 구간 합 구하기 5  (0) 2023.12.12
[C++] 백준 11659 : 구간 합 구하기 4  (0) 2023.12.12
[Python] 최소합 / 전자카트  (0) 2023.03.28
백준 15649 N과M (1)  (0) 2023.03.22
백준 2578 : 빙고  (4) 2023.02.25