728x90
SMALL
🚪 Monty Hall Problem (몬티 홀 문제)
🧠 요약
“세 개의 문 중 하나에 상품이 숨겨져 있다.
선택 후, 진행자가 비어 있는 문 하나를 열고, 바꿀 기회를 준다면?문을 바꾸는 게 유리할까?”
🎭 실화 기반
이 문제는 실제 미국 게임쇼 **<Let's Make a Deal>**의 사회자
**Monty Hall(몬티 홀)**이 만들었던 룰에서 유래했어.
🎲 문제 설정
- 당신 앞에 3개의 문
- 하나에만 자동차, 나머지 두 개엔 염소 🐐
- 당신은 문 하나를 선택함 (예: 문 1)
- 사회자가 당신이 고르지 않은 문 중 염소가 있는 문을 열어줌
- 남은 두 문 중 하나로 바꿀 기회가 주어짐
❓ 질문
그대로 간다 vs 바꾼다
어느 쪽이 이길 확률이 높을까?
❌ 대부분의 직관:
"이제 남은 문은 둘, 확률은 50:50이겠지?"
아니야! 진짜는…
✅ 정답: 바꾸는 게 2배 유리하다!
전략승률
바꾸지 않음 | 1/3 |
바꾼다 | 2/3 ✅ |
🔍 왜 그런가? (스토리 기반)
초기에 자동차가 숨겨져 있는 확률은:
- 당신이 고른 문: 1/3
- 나머지 두 문: 2/3
진행자는 항상 "당신이 고르지 않은 문 중 염소가 있는 문을 열기 때문에",
정보가 2/3 확률 쪽으로 몰림
→ 즉, 처음 안 골랐던 문에 자동차가 있을 가능성이 높음!
👁🗨 예시 시뮬레이션
- 자동차가 문 2에 있음
- 당신은 문 1을 선택
- 사회자가 문 3을 열어 염소를 보여줌
- 바꾸면 → 문 2로 가니까 자동차! 🎉
🧾 Pseudocode
Repeat N times:
Randomly place car behind one of 3 doors
Player randomly picks one door
Host opens a door with a goat (not the player’s pick)
If player always switches:
Check if switched door has the car
Else if player never switches:
Check if original door has the car
Count wins for each strategy
Compare win rates
Randomly place car behind one of 3 doors
Player randomly picks one door
Host opens a door with a goat (not the player’s pick)
If player always switches:
Check if switched door has the car
Else if player never switches:
Check if original door has the car
Count wins for each strategy
Compare win rates
🐍 Python 코드 (시뮬레이션)
import random
def monty_hall_simulate(num_trials=10000, switch=True):
wins = 0
for _ in range(num_trials):
doors = [0, 1, 2]
car = random.choice(doors)
pick = random.choice(doors)
# 진행자가 염소가 있는 문을 연다
possible_doors = [d for d in doors if d != pick and d != car]
opened = random.choice(possible_doors)
if switch:
# 남은 문으로 바꿈
remaining = [d for d in doors if d != pick and d != opened][0]
if remaining == car:
wins += 1
else:
if pick == car:
wins += 1
win_rate = wins / num_trials
strategy = "바꾸기" if switch else "안 바꾸기"
print(f"{strategy} 전략의 승률: {win_rate:.4f}")
# 실행
monty_hall_simulate(switch=True) # 바꾸기 전략
monty_hall_simulate(switch=False) # 안 바꾸기 전략
def monty_hall_simulate(num_trials=10000, switch=True):
wins = 0
for _ in range(num_trials):
doors = [0, 1, 2]
car = random.choice(doors)
pick = random.choice(doors)
# 진행자가 염소가 있는 문을 연다
possible_doors = [d for d in doors if d != pick and d != car]
opened = random.choice(possible_doors)
if switch:
# 남은 문으로 바꿈
remaining = [d for d in doors if d != pick and d != opened][0]
if remaining == car:
wins += 1
else:
if pick == car:
wins += 1
win_rate = wins / num_trials
strategy = "바꾸기" if switch else "안 바꾸기"
print(f"{strategy} 전략의 승률: {win_rate:.4f}")
# 실행
monty_hall_simulate(switch=True) # 바꾸기 전략
monty_hall_simulate(switch=False) # 안 바꾸기 전략
💡 실행 예시
바꾸기 전략의 승률: 0.6661
안 바꾸기 전략의 승률: 0.3339
안 바꾸기 전략의 승률: 0.3339
🎯 요약
항목설명
직관 | 두 문이 남았으니 50:50? |
진실 | 처음 선택이 틀렸을 확률이 2/3이므로, 바꾸는 게 유리 |
결과 | 바꾸면 이길 확률 2배 증가! |
수학 핵심 | 조건부 확률 + 정보 갱신 |
728x90
LIST
'개발' 카테고리의 다른 글
[알고리즘] Ramanujan–Hardy Number (라마누잔–하디의 수: 1729) (0) | 2025.04.18 |
---|---|
[알고리즘] 제논의 역설 (Zeno’s Paradoxes) (0) | 2025.04.16 |
[알고리즘] 완전수(perfect number) 개념과 코드 (0) | 2025.04.12 |
갑자기 느려진 PC! 나몰래 설치된 코인 채굴기 체크하고 삭제하기 (0) | 2024.08.28 |
저작권 걱정 없는 무료 이미지 영상 음악 효과음 다운받는 사이트 (0) | 2024.07.31 |