본문 바로가기
알고리즘

[알고리즘/백준] 1344번 축구 Python 파이썬

by 배애앰이 좋아 2023. 3. 16.
반응형

 

이번 문제는 과거의 수학 공식을 더듬어 보는 문제였습니다.

 

 

축구 게임으로 축구 게임 시간은 총 90분이고 5분 간격으로 총 18번의 득점 기회가 주어졌을 때 한 팀이 소수 점수를 득점할 확률을 구하는 문제입니다. 이때 a, b 팀의 확률 퍼센트가 주어집니다.

 

해당 문제를 풀기 위해서는 확률을 구하는 공식을 알아야하는데 다음과 같습니다.

 

 

위 공식을 이해하기 위해서는 기본적으로 순열에 대해서도 알아야합니다. 

순열이란? 서로 다른 n개의 값에서 r개를 뽑아 나열할 때 순서를 고려하지 않고, 중복없이 수를 의미합니다. 

 

 

저 같은 경우 직접 계산하기보다는 파이썬에서 제공되는 라이브러리를 사용해주었습니다.

다음과 같은 코드를 통해 통과하였습니다.

 

import sys
input = sys.stdin.readline
from itertools import combinations, permutations

a = int(input())
b = int(input())
check = [2, 3, 5, 7, 11, 13, 17] # 소수
c = [ i for i in range(1, 19)] 

pera = a/100.0
perb = b/100.0
sa = sb = 0

# 확률 구하는 공식
# p(k) = 18Ck * P**k * (1-p)**18-k 
for i in range(len(check)):
    # nC2 조합 n!/((n-r)! * r!)
    combi = len(list(combinations(c, check[i]))) # 18Ck
    sa += combi * pow(pera, check[i]) * pow(1.0-pera, 18-check[i])
    sb += combi * pow(perb, check[i]) * pow(1.0-perb, 18-check[i])

print(sa+sb - sa*sb) # 두 팀이 동시에 소수 점수를 낼 확률을 빼주기

 

확률은 오랜만이여서 까먹었는데 이번 기회에 다시 외워야 할 필요성을 느꼈습니다. 

뭔가 많이 쓰일 거 같은 공식이네요.

 

반응형

댓글