Uknow's Lab.
article thumbnail

 

몬티 홀 문제

https://ko.wikipedia.org/wiki/%EB%AA%AC%ED%8B%B0_%ED%99%80_%EB%AC%B8%EC%A0%9C

 

몬티 홀 문제 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 세 개의 문 중에서 1번 문 뒤에 차가 있을 것이라 선택했을 때, 진행자는 3번 문 뒤에는 염소가 있음을 보여주면서 1번 문 대신에 2번문을 선택하겠냐고 물었다.

ko.wikipedia.org

 

몬티 홀 문제(Monty Hall problem)은 미국의 TV쇼 거래를 합시다(Let's Make a Deal)에서 유래된 문제입니다.

 

 

3개의 문이 있습니다.

이 중 하나의 문 뒤에는 자동차가, 나머지 두 개의 문에는 염소가 있습니다.

자동차가 있는 문을 선택한다면 자동차를 받습니다.

 

어떤 사람이 1번 문을 선택한다고 했을 때,

진행자는 3번 문을 열어 문 뒤에 염소가 있음을 보여주고,

1번 대신 2번 문을 선택하겠냐고 묻습니다.

이 때 선택을 바꾸는 것이 유리할까요?

 

간단히 생각해보면, 사회자가 문을 열어주고 남은 문은 두 개이니,

어느 쪽을 선택하든(선택을 바꾸든, 바꾸지 않든) 확률은 1/2으로 보입니다.

 

하지만, 실제로는 정답을 바꾸는 것이 훨씬 이득입니다.

진행자가 꽝(염소)을 보여준 뒤, 처음 선택을 고수하면 1/3이지만, 다른 문을 선택할 경우 확률은 2/3이 됩니다.

 

 

풀이

이는 조건부 확률이 적용되기 때문인데요.

단순히 '2개의 문 중 하나를 고른다'면 확률은 50 : 50이 맞습니다만,

진행자는 어떤 문에 자동차가 있는지 알고 있고, 진행자가 자동차가 있는 문을 여는 일은 절대 일어나지 않기에,

앞의 사건이 뒤의 사건에 영향을 미치게 됩니다.

 

참가자가 1번 문을 선택했다고 가정해봅시다.

처음 선택한 1번 문 뒤에 자동차가 있었다면, 이후 선택을 바꿨을 때 염소를 받게 됩니다(꽝)

하지만, 처음 선택한 1번 문 뒤에가 염소라면? 다른 염소는 사회자가 열었으니, 선택을 바꿀 경우 자동차를 얻게 됩니다.

 

즉, 1번 문을 처음에 선택 + 참가자는 선택을 번복한다고 했을 때,

꽝을 받는 경우의 수는 1번 문이 자동차였을 경우 (1/3) 지만,

자동차를 받는 경우의 수는 2, 3번 문이 자동차였을 경우 (2/3)이 됩니다.

 

 

 

출저 위키피디아 https://ko.wikipedia.org/wiki/%EB%AA%AC%ED%8B%B0_%ED%99%80_%EB%AC%B8%EC%A0%9C

 

 

 

코딩으로 실험해보기

public class Main {
    public static void main(String[] args) {
        int testCase = 1000000000; // 전체 시뮬레이션 횟수
        int switchWins = 0; // 문을 바꿨을 때의 이긴 횟수
        int stayWins = 0; // 처음 선택을 유지했을 때의 이긴 횟수

        Random random = new Random();

        for (int i = 0; i < testCase; i++) {
            // 세 개의 문 중 하나에 차를 랜덤하게 배치
            int carDoor = random.nextInt(3) + 1;

            // 참가자가 처음 문을 선택
            int initialChoice = random.nextInt(3) + 1;

            // 사회자가 열 문 선택 (차가 있는 문이 아니고 참가자가 선택한 문이 아니어야 함)
            int openDoor = -1;
            do {
                openDoor = random.nextInt(3) + 1;
            } while (openDoor == carDoor || openDoor == initialChoice);

            // 참가자가 바꾼 최종 선택 (참가자가 선택한 문이 아니고 열린 문이 아니어야 함)
            int finalChoice = -1;
            do {
                finalChoice = random.nextInt(3) + 1;
            } while (finalChoice == openDoor || finalChoice == initialChoice);

            // 바꾼 선택이 차가 있는 문인 경우
            if (finalChoice == carDoor) {
                switchWins++;
            }
            // 처음 선택을 유지했을 때 차가 있는 문인 경우
            if (initialChoice == carDoor) {
                stayWins++;
            }
        }

        // 결과 출력
        System.out.println("바꿨을 때 맞춘 횟수: " + switchWins);
        System.out.println("선택을 유지했을 때 맞춘 횟수: " + stayWins);
        System.out.println("바꿨을때의 승률: " + (double) switchWins / testCase * 100 + "%");
        System.out.println("선택을 유지했을 때의 승률: " + (double) stayWins / testCase * 100 + "%");
    }
}

 

바꿨을 때 맞춘 횟수: 666681970
선택을 유지했을 때 맞춘 횟수: 333318030
바꿨을때의 승률: 66.66819699999999%
선택을 유지했을 때의 승률: 33.331803%

 

10억 번(1,000,000,000)의 테스트를 돌린 결과,

선택을 바꿨을 때 맞춘 횟수는 666,681,970회 (66.66819699999999%)

선택을 유지했을 때 맞춘 횟수는 333,318,030회 (33.331803%)로,

예상했던 2/3과 1/3에 근사하게 나타났습니다.

 

 

 

마치며

수많은 글들을 뒤져보고, 직접 코딩을 해서 실험을 해보고 나서야 어느정도 논리적으로는 이해가 되었으나

직관적으로는 잘 와닿지는 않았던... 문제였습니다.

 

실제로 처음 메릴린 사반트가 몬티홀 문제에 관한 글을 제시했을 때,

노벨상 수상자, 수학관련 박사 학위 소지자 등으로부터 수많은 메일을 받았다고 하네요.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.