개발

[알고리즘] Monty Hall Problem (몬티 홀 문제)

딱딱키보드 2025. 4. 20. 15:45
728x90
SMALL

🚪 Monty Hall Problem (몬티 홀 문제)

🧠 요약

“세 개의 문 중 하나에 상품이 숨겨져 있다.
선택 후, 진행자가 비어 있는 문 하나를 열고, 바꿀 기회를 준다면?

문을 바꾸는 게 유리할까?


🎭 실화 기반

이 문제는 실제 미국 게임쇼 **<Let's Make a Deal>**의 사회자
**Monty Hall(몬티 홀)**이 만들었던 룰에서 유래했어.


🎲 문제 설정

  1. 당신 앞에 3개의 문
  2. 하나에만 자동차, 나머지 두 개엔 염소 🐐
  3. 당신은 문 하나를 선택함 (예: 문 1)
  4. 사회자가 당신이 고르지 않은 문 중 염소가 있는 문을 열어줌
  5. 남은 두 문 중 하나로 바꿀 기회가 주어짐

❓ 질문

그대로 간다 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

🐍 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)  # 안 바꾸기 전략

💡 실행 예시

 
바꾸기 전략의 승률: 0.6661  
안 바꾸기 전략의 승률: 0.3339

🎯 요약

항목설명
직관 두 문이 남았으니 50:50?
진실 처음 선택이 틀렸을 확률이 2/3이므로, 바꾸는 게 유리
결과 바꾸면 이길 확률 2배 증가!
수학 핵심 조건부 확률 + 정보 갱신
728x90
LIST