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 |