몬티홀 딜레마는 미국에서 약 40여 년간 방영한 미국의 TV쇼에서 유래한 확률 문제임.
사회자의 이름인 몬티 홀(Monty Hall)의 이름을 따서 몬티홀 딜레마 혹은 몬티홀 문제(Monty Hall Problem)이라고 불림.
A, B, C 세 개 문 중 하나의 문 뒤에 자동차가 있고, 나머지 문 뒤에는 염소가 있다.
참가자가 하나를 고르면, 정답을 아는 사회자가 나머지 두 개의 문 중 염소가 있는 문을 하나 연다.
이후 참가자에게 답을 바꿀 기회를 준다. 이때, 답을 바꾸는 게 좋을까 아니면 그대로 있는 게 좋을까?
얼핏 보면 최종적으로는 2개 중 하나이니까 50% 확률이라고 생각하기 쉽다.
하지만, 처음에 정답을 골랐을 확률은 1/3이고, 오답이 제거된 상황에서 처음 답을 유지하면 여전히 1/3 확률로 정답이지만, 선택을 바꿀 경우 1 - 1/3 = 2/3로 정답을 맞힐 확률이 올라간다.
좀 더 이해하기 쉽게 처음에 선택지가 10개가 있었다고 가정하자.
처음에 정답을 맞힐 확률은 10%밖에 안된다. 이후 사회자가 나머지 8개의 오답을 모두 제거하고 이제 딱 2개만 남았다고 생각해보자. 이런 경우엔 당연히 본인이 처음에 선택한 문보다는 사회자가 열지 않은 마지막 남은 문에 자연스럽게 눈길이 가게 될 것이다. 사회자가 남긴 문이 정답일 확률이 90%인 것이다.
이 문제를 코드로 작성해서 확인해 보자.
// Online C# Editor for free
// Write, Edit and Run your C# code using C# Online Compiler
using System;
public class HelloWorld
{
static Random rand = new Random();
static float TestMontyHall(int totalItemCount, bool changeFirstSelection, int testCount)
{
int successCount = 0;
for (int i = 0; i < testCount; ++i)
{
int correctIndex = rand.Next(totalItemCount);
int firstAnswerIndex = rand.Next(totalItemCount);
// 처음 선택을 바꾼 경우
if (changeFirstSelection)
{
// 첫번째 선택이 답이 아닌라면, 바꾼 후에 성공!
if (correctIndex != firstAnswerIndex)
++successCount;
}
else // 선택을 바꾸지 않은 경우
{
// 첫번째 선택이 정답인 경우에만, 성공
if (correctIndex == firstAnswerIndex)
++successCount;
}
}
return (float)successCount / testCount;
}
public static void Main(string[] args)
{
Console.WriteLine ("Hello Monty Hall Problem World");
Console.WriteLine ("If you change the first selection, success ratio is " + TestMontyHall(3, true, 10000));
Console.WriteLine ("If you don't change the first selection, success ratio is " + TestMontyHall(3, false, 10000));
}
}
결과는 아래와 같다.
Hello Monty Hall Problem World If you change the first selection, success ratio is 0.664 If you don't change the first selection, success ratio is 0.3301 |
몬티홀 문제를 풀게 될 경우가 생긴다면, 처음 선택을 고집하지 말고 답을 바꾸자!