https://www.acmicpc.net/problem/1359
1359번: 복권
첫째 줄에 세 정수 N, M, K가 주어진다.
www.acmicpc.net
🔷 알고리즘 분류 - 수학, 브루트포스 알고리즘, 조합론 확률론
난이도 - 실버 4
🔶문제 풀이 - 확률론을 이용한 풀이
import math
def combination(n, r): # 조합을 계산하는 함수
if n < r: # nCr에서 r이 n보다 크면 조합은 0
return 0
return math.factorial(n) / (math.factorial(r) * math.factorial(n-r)) # nCr = n! / (r!(n-r)!)
n, m, k = map(int, input().split()) # n, m, k 입력 받기
x = combination(n, m) # 전체 경우의 수 계산
result = 0 # 성공적인 경우의 수를 저장할 변수 초기화
for i in range(k, m+1): # k부터 m까지 반복
result += combination(m, i) * combination(n-m, m-i) # 성공적인 경우의 수 계산
print(result / x) # 확률 출력 (성공적인 경우의 수 / 전체 경우의 수)
🔶문제 이해하기
n=8은 복권 번호가 총 8개임을 의미하고, m=4는 우리가 선택할 복권 번호가 4개라는 뜻입니다.
k=2는 우리가 당첨될 수 있는 최소 당첨 번호가 2개라는 의미입니다.
우리의 목표는 당첨 번호를 k개 이상 맞추는 경우의 확률을 계산하는 것입니다.
for 루프는 k부터 m까지 반복하므로, 2부터 4까지 반복합니다.
루프의 각 단계에서, 우리는 성공적인 경우의 수를 계산합니다.
1. i=2일 때, 복권 번호 4개 중에서 2개의 당첨 번호를 맞추는 경우의 수는 combination(4, 2)입니다.
나머지 2개의 복권 번호는 당첨 번호가 아니므로, 이는 4개의 남은 복권 번호 중에서 2개를 선택하는 경우의 수로 계산할 수 있습니다.
이는 combination(8-4, 4-2) = combination(4, 2)입니다.
따라서, i=2일 때의 성공적인 경우의 수는 combination(4, 2) * combination(4, 2)입니다.
2. i=3일 때, 복권 번호 4개 중에서 3개의 당첨 번호를 맞추는 경우의 수는 combination(4, 3)입니다.
나머지 1개의 복권 번호는 당첨 번호가 아니므로, 이는 4개의 남은 복권 번호 중에서 1개를 선택하는 경우의 수로 계산할 수 있습니다.
이는 combination(8-4, 4-3) = combination(4, 1)입니다.
따라서, i=3일 때의 성공적인 경우의 수는 combination(4, 3) * combination(4, 1)입니다.
3. i=4일 때, 복권 번호 4개 중에서 4개의 당첨 번호를 맞추는 경우의 수는 combination(4, 4)입니다.
나머지 0개의 복권 번호는 당첨 번호가 아니므로, 이는 4개의 남은 복권 번호 중에서 0개를 선택하는 경우의 수로 계산할 수 있습니다.
이는 combination(8-4, 4-4) = combination(4, 0)입니다.
따라서, i=4일 때의 성공적인 경우의 수는 combination(4, 4) * combination(4, 0)입니다.
이렇게 각 단계에서 성공적인 경우의 수를 모두 더하면 전체 성공적인 경우의 수를 얻을 수 있습니다.
이를 전체 경우의 수 combination(8, 4)로 나누어주면 확률을 얻을 수 있습니다.
'백준 알고리즘' 카테고리의 다른 글
백준 - 1292 쉽게 푸는 문제 python 문제풀이 [Hellfer] (0) | 2024.03.10 |
---|---|
백준 - 10844번 쉬운 계단 수 python 문제풀이 [Hellfer] (0) | 2024.02.19 |
백준 - 11725번 트리의 부모 찾기 python 문제풀이 [Hellfer] (2) | 2024.02.07 |
백준 - 1238번 파티 python 문제풀이 [Hellfer] (2) | 2024.01.31 |
백준 - 1268번 임시 반장 정하기 python 문제풀이 [Hellfer] (2) | 2024.01.27 |
백준 - 2535번 아시아 정보올림피아드 python 문제풀이 [Hellfer] (3) | 2024.01.24 |
백준 - 1543번 문서 검색 python 문제풀이 [Hellfer] (0) | 2024.01.19 |
백준 - 1817번 짐 챙시는 숌 python 문제풀이 [Hellfer] (0) | 2024.01.18 |