본문 바로가기
알고리즘

알고리즘 001

by 서현03 2023. 3. 6.

한 반에 100명이 참여하는 수업이 있다. 

여기서 같은 생일을 가진 사람이 2명 이상일 확률은 얼마나 될까?

 

나의 풀이.

먼저 100명의 생일 데이터를 월별로 분류한다.

그리고 난 후, 날짜별로 오름차순으로 정리한다.

이렇게 되면 보다 쉽게 같은 생일을 가진 사람들을 찾을 수 있다.

 

슈도코드

 

 

import random

def find_duplicate_birthdays(k):
  birthdays = [random.randint(1, 365) for i in range(k)]
  birthday_counts = {}
  for birthday in birthdays:
    if birthday not in birthday_counts:
      birthday_counts[birthday] = 1
    else:
      birthday_counts[birthday] += 1
  for count in birthday_counts.values():
    if count >= 2:
      return True
  return False

def calculate_probability(k):
  num_trials = 10000
  num_successes = 0
  for i in range(num_trials):
    if find_duplicate_birthdays(k):
      num_successes += 1
  return num_successes / num_trials

# 여러 가지 k 값에 대해 적어도 2명의 학생이 같은 생일을 가질 확률 계산
for k in range(2, 21):
  probability = calculate_probability(k)
  print(f"Class size: {k}, Probability of at least two students having the same birthday: {probability:.4f}")

 

수정 필요