생일 문제
https://ko.wikipedia.org/wiki/%EC%83%9D%EC%9D%BC_%EB%AC%B8%EC%A0%9C
생일 문제 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 모인 사람 수에 따라 생일이 같은 두 사람이 있을 확률이 얼마나 되는지를 보이는 그래프. 가로축이 사람 수,그리고 세로축이 확률을 나타낸다. 23명이 모였을
ko.wikipedia.org
**생일 문제 (Birthday Problem)**는 통계학에서 유명한 문제로, 적은 수의 사람들이 있을 때도 두 사람이 같은 생일을 가질 확률이 놀랍게 높다는 것을 보여줍니다.
문제 정의
문제:
- n명이 있을 때, 이들 중 최소한 두 명이 같은 생일을 가질 확률을 계산합니다.
- 생일은 1년이 365일로 가정하며 균등하게 분포한다고 가정합니다.
확률 계산
1. 기본 개념
- 생일이 모두 다를 확률을 먼저 계산한 후, 이를 전체 확률(1)에서 빼면 최소 두 사람이 같은 생일을 가질 확률이 됩니다.
2. 생일이 모두 다를 확률
- 첫 번째 사람의 생일은 365일 중 아무 날이나 가능합니다.
- 두 번째 사람의 생일은 첫 번째 사람과 다를 경우, 가능한 날은 364일입니다.
- 세 번째 사람의 생일은 앞 두 사람과 다를 경우, 가능한 날은 363일입니다.
- 이렇게 계산을 반복하여 n번째 사람까지 계산합니다.
def birthday_problem(n):
days_in_year = 365
probability = 1.0 # 초기 확률은 모두 다른 생일로 가정
for i in range(n):
probability *= (days_in_year - i) / days_in_year
# 최소 두 사람이 같은 생일일 확률
return 1 - probability
# 예제: 23명일 때 확률
n = 23
result = birthday_problem(n)
print(f"With {n} people, the probability of at least two sharing a birthday is {result:.4f}")
결과
- 23명: 50.73%
- 30명: 70.63%
- 50명: 97.04%
- 60명: 99.41%
직관적 이해
- 생일이 365일 중 고르게 분포한다는 가정 아래, 사람들이 많아질수록 가능한 생일의 조합이 급격히 줄어들기 때문에 두 명 이상이 같은 생일을 가질 확률이 빠르게 증가합니다.
이것이 바로 생일 문제의 핵심입니다. 😊
'Coding Test > 알고리즘 이론' 카테고리의 다른 글
위상정렬 - Leetcode 문제(Easy 레벨) (0) | 2024.12.28 |
---|---|
유니버설 해싱(랜덤 해싱) (1) | 2024.12.27 |
DFS와 BFS (0) | 2024.12.13 |
코딩 테스트 이론 - 그리디(greedy) 탐욕 알고리즘 (0) | 2024.11.11 |
코딩 테스트 이론 - 단조 스택(Monotonic Stack) (0) | 2024.11.10 |