2005-4-21
예전에 봤던 퍼즐을 어제 우연히 다시 보게 된 김에... 아직 본 적이 없는 분들을 위해 소개합니다. 꽤 재미있는 문제거든요.
어떤 퀴즈 프로그램에서 우승자에게 다음과 같은 기회를 줍니다.
똑같이 생긴 세 개의 문이 있는데, 그 가운데 하나는 최고급 승용차가 숨어 있고 나머지 둘은 염소가 숨어 있습니다.
우승자가 이 세 문 가운데 하나를 고르면, 사회자는 나머지 두 문 가운데 염소가 있는 문 하나를 열어 보입니다.
그러고 나서 우승자는 다시 한 번 문을 고를 기회를 갖습니다.
처음 고른 문을 그대로 택하는 것이 나을까요. 바꾸는 것이 나을까요? 아니면 어느 문을 고르나 마찬가지일까요?
아래 답과 해설이 있습니다만, 보기 전에 한 번 생각해보세요.
바꾸는 것이 바꾸지 않는 것보다 두 배 유리합니다.
어차피 문이 두 개 남았으니 확률은 반반, 바꾸나 안 바꾸나 똑같다고 생각하셨나요? :-)
1. 가장 직관적으로,
"바꾸지 않았더니 승용차더라"가 되려면, "처음에 승용차를 골랐어야"하고, 이 확률은 3분의 1
"바꿨더니 승용차더라"가 되려면, "처음에 염소를 골랐어야"하고, 이 확률은 3분의 2
2. 문제를 극단적으로 바꿔서,
문이 10000개 있습니다. 내가 1번 문을 골랐습니다. 사회자가 2번부터 10000번까지 9999개의 문 중에 딱 하나, (예를 들어) 3275번 문을 제외한 나머지 9998개의 문을 열어서 제게 보여줬습니다. 이 상황에서 1번을 고집하는 게 나을까요 3275번 문을 택하는게 나을까요? :-) 1번 문에 차가 있을 확률은 만분의1, 2~10000번 문들 중에 차가 있을 확률은 만분의9999. 이 때 다른 문이 전부 열렸으니 3275번 문에 차가 있을 확률이 만분의9999가 되는 겁니다.
3. 문 세 개 중에, "이 문 뒤에 차가 있다"와 "이 문을 제외하고 나머지 두 개의 문 중 하나 뒤에 차가 있다" 중에 하나를 택하라면 당연히 후자를 택하겠죠. 처음에 어떤 문을 택하던지 그것은 전자에 해당됩니다. 그리고 사회자가 염소를 보여준 후에 문을 바꾸는 것이 후자를 택하는 방법입니다.
4. 경우의 수로 나타내면 다음과 같습니다.
1) 내가 차를 골랐다
1-1) 바꿨다 - 실패
1-2) 안 바꿨다 - 성공
2) 내가 염소A를 골랐다 (여기서 "염소를 골랐다"라고 하면 잘못입니다)
2-1) 바꿨다 - 성공
2-2) 안 바꿨다 - 실패
3) 내가 염소B를 골랐다
3-1) 바꿨다 - 성공
3-2) 안 바꿨다 - 실패
위 여섯가지 경우에서 "바꿔서 성공"이 두 가지, "안 바꿔서 성공"이 한 가지입니다. 바꾸는 게 낫습니다.
4'. 4의 경우의 수에서, 너무 깊이 생각하면 다음과 같은 함정에 빠지게 됩니다.
1) 내가 차를 골랐다
1-1) 사회자가 염소A를 보여줬다
1-1-1) 바꿨다 - 실패
1-1-2) 안 바꿨다 - 성공
1-2) 사회자가 염소B를 보여줬다
1-2-1) 바꿨다 - 실패
1-2-2) 안 바꿨다 - 성공
2)와 3)은 위와 동일
이렇게 해서 "총 여덟가지 경우"를 상정하게 되면 "바꿔서 성공"이 두 가지, "안 바꿔서 성공"이 두 가지가 나와서 동일한 확률이라고 생각하게 됩니다. 그렇지만 사회자가 "염소A"를 보여주는 것과 "염소B"를 보여주는 것은 "1) 내가 차를 골랐을 때"만 분기할 수 있는 것이기 때문에 2)와 3)에 있는 경우와 동일하게 취급할 수 없습니다.
이 문제(Monty Hall Problem 이라 불립니다)가 처음 나왔을때, "바꾸는 게 유리하다"라는 답을 도저히 수긍하지 못해서 수많은 사람들이 항의를 했다고 합니다. 그 중에 수학자들도 있었다고 하네요. ^^; 저도 처음 이 문제를 봤을 때는 똑같다고 대답했습니다. -.-;
참조할 만한 사이트
http://www.cut-the-knot.org/hall.shtml - 여기에 보면 중간에 시뮬레이션도 있네요. 셋 중에 하나를 고르고 나면 결과를 알려줍니다. 50번 정도만 반복해보면 바꾸는 게 이득인 경우가 그렇지 않은 경우보다 두 배 가량 더 많이 나타나는 것을 볼 수 있습니다.
문제의 상황을 그대로 재현한 코드입니다. 재현을 50번 정도만 반복해도 선택을 바꿔야 하는 경우가 바꾸지 않아야 하는 경우보다 많게 나오고, 1000번 정도 또는 그 이상 반복하면 그 차이가 거의 정확히 두 배가 됨을 알 수 있습니다.
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <sys/types.h>#include <unistd.h>int main(int argc, char *argv[]) {
int car, first, new, oper, change = 0, unchange = 0;
unsignedint m, c;
srand(getpid()*time(NULL));
/* 사용법: car 숫자 숫자는 반복할 횟수*/if (argc == 1) {
printf("Usage: car number\n");
return1;
}
m = atoi(argv[1]);
for (c = 0; c < m; c++) {
/* 0번, 1번, 2번 이렇게 문이 세개 있을 때 *//* 실제 차가 있는 문 - 랜덤하게 결정 */
car = (int)(3.0 * rand()/(RAND_MAX+1.0));
/* 내가 선택한 문 - 랜덤하게 결정 */
first = (int)(3.0 * rand()/(RAND_MAX+1.0));
/* 사회자가 열어주는 문 - 차가 없고, 내가 선택하지 않은 문 */for( ; ; ) {
oper = (int)(3.0 * rand()/(RAND_MAX+1.0));
if (oper != car && oper != first)
break;
}
/* 바꾸게 될 경우 택하게 되는 문 - first 와 oper 외의 나머지 하나 */
new = 3 - oper - first;
if (car == first) unchange++; /* 처음 고른 곳에 차가 있는 경우 */elseif (car == new) change++; /* 바꾼 곳에 차가 있는 경우 */
}
printf("Changed: %d\nUnchanged: %d\n", change, unchange);
}
실행 결과 캡춰:
Nyxity : 전 단순히 독립시행이라 가정하고 1/3*1/2 = 1/6 그대로가 더 유리해..라는 엄청 단순한 생각을 했었죠. - 2005-4-21 2:34 pm
Raymundo : 문제가 처음 나왔을 당시에만 반발이 심한 게 아니로군요. [KPUG]에 올렸더니 여기서도.. :-) - 2005-4-21 5:37 pm
Raymundo : 미국에 마릴린이라는 아주 똑똑한 사람이 있는데, 잡지에 "마릴린에게 물어보세요"라는 코너가 있어서 거기에 질문을 보내면 답을 해 주는 식이었대요. 근데 저 질문을 누가 했고, 마릴린이 답을 말했는데, 납득못하는 사람들의 항의가 빗발치다못해 협박편지까지 날아들었다더군요. 뭐 저도 해설을 듣고서야 간신히 납득했지 혼자 풀 때는 아무리 생각해도 오답 쪽으로만 결론이 났던 기억이... - 2005-4-21 6:22 pm
일일공이 : 맞추긴 했는데, 너무 심한 추론이라... 안바꿀 때의 확률은 1/3 (처음 차를 선택할 확률), 바꿀 때의 확률은 2/3 (처음 염소를 선택할 확률)...ㅋㅋㅋ - 2006-11-20 11:53 am
Raymundo : 일일공이/ 아니 그게 정확한 답 맞다니깐 :-) 잘 지내? - 2006-11-20 1:25 pm
Raymundo : [여기]도 마찬가지. 이론상으론 적합하나, 실제상으로는 적합하다고 말하기 힘듭니다.로 시작하는 답글을 보면.. 이 사람은 나름대로 얼마나 진지하게 답했을까 싶다..만, 진지한 건 진지한 거고 어쨌거나 틀렸음. :-) 이 링크 퍼즐은 몬티_홀_문제을 통해 알게 된 건데, 주절주절에 하얀까마귀님 말씀처럼 몬티홀 문제의 진정한 신비는, 정답은 명확한데 그 정답을 인정하고 싶어하지 않는다는 사람이 엄청나게 많다는 것 - 2008-2-1 12:17 am
내용: == [[/퍼즐-몇번물어봐야하나]] == '''2005-11-16''' [[/퍼즐-바꿀까말까]]에 이어, 어제 재미있는 문제를 발견해서 올립니다. {{{ P, Q, R, S의 네 명이 경주를 하여, 1위부터 4위까지의 순위를 매겼다. 이 중 2명에게 「너희들 두 명 중, 누가 빠르지?」라고 몇 ...