승려의 섬에는 과연 무슨일이 일어났는가?

Programming/Algorithms 2007. 2. 21. 10:56

마이크로 소프트사는 기발한 면접 문제로 유명하다.  아래는 마이크로소프트사에서 면접을볼때 질문했던 문제중에 하나입니다. 여러분도 한번 생각해 보세요


if((생각한 시간 > 2분) || (문제의 답을 이미 알고 있는가?)){
    웃고 넘어감;
}else{
    앞으로 돌아가서 최소한 2분 동안 답을 생각해 볼것;
}
 
"옛날에 어느 나라에  승려들만 모여 사는 섬이 있다. 그들 중에서 어느 사람은 눈이 빨갛고 어느 사람은 눈이 갈색이다. 눈이 빨간 사람은 마법에 걸려 있기 때문에 스스로 눈이 빨갛다는 사실을 깨닫게 되면 그날 밤 12시에 스스로 목숨을 끊어야만 한다(그것은 마법이었기 때문에 눈이 빨갛다는 사실을 깨달은 사람은 예외 없이 목숨을 끊어야 한다). 승려들은 서로의 눈 색깔에 대해 전혀 언급하지 않는다는 불문율이 있었기에 상대방의 눈 색깔을 알려줄 수도 없었다. 그 섬에는 거울도 없고 거울 비슷한 물건도 없었기 때문에 자신의 눈이 무슨 색인지 아는 사람은 아무도 없었다. 그래서 그들은 자신의 눈 색깔을 알 길이 없었기에 행복하게 살아갈 수 있었으며, 자살 따위를 하는 사람은 아무도 없었다.
 그러던 어느 날 그 섬에 관광객이 찾아왔다. 그는 승려들 사이에 존재하는 규칙을 알지 못했기 때문에 절대로 하지 말아야할 말을 내뱉고 말았다.
 "당신들 중에서 적어도 한 명은 눈이 빨간색이로군요."
무심한 관광객은 그 날로 되돌아갔지만, 남아있는 승려들은 생전 처음으로 눈 색깔에 대한 말이 나왔기 때문에 크게 동요하지 않을 수 없었다. 그리고 그날 밤부터 그 섬에는 무서운 일이 일어나기 시작했다. 빨간 눈을 가진 사람은 모두 3명이 있었다. 과연 어떤 일이 일어났겠는가?

임백준저 - 누워서 읽는 알고리즘 중에서 발췌


http://www.sellsbrothers.com/fun/msiview/default.aspx?content=question.htm


위 주소는 마이크로소프트사의 면접 문제를 모아놓은 곳입니다.
 
 
---------------------------
 
var dayCount = 0;
whatHappened = function (redEye:Number):Number { dayCount++; if (redEye == 1) {
                trace(dayCount+"");
        } else {
                trace(whatHappened(redEye-1)+"번 승려 죽음");
        }
        return redEye;
};
trace(whatHappened(3)+"번 승려 죽음");

----------------------------
 
flash에서는 메모리상의 스택 Depth가 255를 넘어가게 되면 오버플로우(overflow)가 발생한다. 다시 말해서 위 redeye 승려가 255명을 초과하게 되면 플래시는 힘들다고 계산 안한다.  그런데 구현이 맞는지 모르겠습니다.;;

    

설정

트랙백

댓글