Coding Test/알고리즘 이론

생일 문제

hyunkookim 2024. 12. 27. 13:24

생일 문제

 

https://ko.wikipedia.org/wiki/%EC%83%9D%EC%9D%BC_%EB%AC%B8%EC%A0%9C

 

생일 문제 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 모인 사람 수에 따라 생일이 같은 두 사람이 있을 확률이 얼마나 되는지를 보이는 그래프. 가로축이 사람 수,그리고 세로축이 확률을 나타낸다. 23명이 모였을

ko.wikipedia.org

 

**생일 문제 (Birthday Problem)**는 통계학에서 유명한 문제로, 적은 수의 사람들이 있을 때도 두 사람이 같은 생일을 가질 확률이 놀랍게 높다는 것을 보여줍니다.


문제 정의

문제:

  1. n명이 있을 때, 이들 중 최소한 두 명이 같은 생일을 가질 확률을 계산합니다.
  2. 생일은 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일 중 고르게 분포한다는 가정 아래, 사람들이 많아질수록 가능한 생일의 조합이 급격히 줄어들기 때문에 두 명 이상이 같은 생일을 가질 확률이 빠르게 증가합니다.

이것이 바로 생일 문제의 핵심입니다. 😊