
비행기를 타려는 100명의 승객이 있습니다. 각 승객은 지정된 좌석이 있지만, 첫 번째 승객은 시스템 오류로 인해 랜덤으로 좌석을 선택해야 합니다. 이후 승객들은 지정 좌석이 비어있으면 앉지만, 그렇지 않다면 또 다른 랜덤한 좌석을 선택해야 합니다. 마지막 승객이 자신의 지정 좌석에 앉을 확률은 얼마일까요? 이 문제는 '100석 비행기 문제'로 잘 알려져 있으며, 확률 및 논리적 사고를 테스트하는 데 자주 사용됩니다. 오늘 이 흥미로운 퍼즐을 해결하며 확률의 세계를 자세히 탐구해 봅시다.
문제를 시작하기 전에 알고 있어야 할 사항
- '100석 비행기 문제'는 재미있을 뿐만 아니라 직관적 사고와 확률 개념을 테스트하는 뇌운동과 같습니다. 이러한 유형의 문제는 Google, Amazon 같은 회사가 면접에서 종종 사용합니다.
- 이 문제를 해결하려면 확률에 대한 기본 이해가 필요하며, 단순한 문제에서 시작해 점차 복잡한 시나리오를 생성할 수 있습니다.
- 문제의 핵심은 첫 번째 승객의 행동이 나머지 승객과 최종 승객의 결과를 직접적으로 영향을 미친다는 것입니다. 이 개념은 "재귀적 사고"로 설명할 수 있습니다.
- 복잡한 패턴처럼 보이지만 실제로는 매우 단순한 결론으로 끝납니다. 이를 통해 논리적 사고와 문제 분해 능력을 발달시킬 수 있습니다.
- 특히 마지막 승객의 좌석 선택 확률이 정확히 50%라는 사실은 많은 사람들을 놀라게 합니다. 그런데 왜 그럴까요?
첫 번째 승객의 역할과 문제의 재설정
- 문제는 첫 번째 승객이 랜덤으로 좌석을 선택하는 것으로 시작합니다. 첫 번째 승객의 선택은 전체 시뮬레이션의 초기 조건을 설정합니다.
- 만약 첫 번째 승객이 자신의 지정 좌석을 선택하면 문제는 더 간단해집니다. 나머지 99명의 승객은 모두 자신의 지정 좌석에 앉게 됩니다.
- 반면 첫 번째 승객이 다른 승객의 좌석을 선택한다면? 이 경우 문제는 여전히 처음과 동일한 동작을 반복하지만, 승객의 수와 좌석의 수만 줄어드는 상황이 됩니다. 이를 통해 문제는 본질적으로 "재설정"됩니다.
- 재설정 후에도 마지막 두 개의 중요한 좌석(1번과 100번) 중 하나가 남게 되는 점이 문제를 해결하는 골자가 됩니다.
- 즉, 문제는 첫 번째 승객의 랜덤 선택이라는 복잡한 시작점에서 점차 단순화되어 구체적인 패턴을 보여줍니다.
확률의 대칭성과 핵심 논리
- 문제의 핵심은 마지막 승객이 자신의 지정 좌석에 앉을 확률이 정확히 50%라는 점입니다. 이는 여러 복잡한 선택 후에도 확률이 변하지 않는다는 사실에서 비롯됩니다.
- 모든 승객이 자신의 좌석에 앉는 것을 선호하지만, 첫 번째 승객의 무작위 행동은 체계적인 예측을 어렵게 만듭니다. 하지만 대칭성 덕분에 마지막 결과는 간단합니다.
- 문제를 풀기 위해 각 승객의 행동을 시뮬레이션할 필요는 없습니다. 대신 문제의 본질적 대칭성을 이해하면 결론에 도달할 수 있습니다.
- 대칭성의 비유로 동전을 던지는 경우를 생각할 수 있습니다. 두 개의 가능한 결과(앞면과 뒷면)가 동일한 확률로 나타나게 됩니다. 이와 유사하게, 마지막 승객도 자신의 지정 좌석에 앉거나 그렇지 않을 두 가지 가능성이 있습니다.
- 이러한 각 결과는 똑같이 가능한 상태로 수렴하기 때문에, 결과적으로 확률은 1/2로 나뉩니다.
파이썬 코드로 문제 시뮬레이션하기
- 이 문제를 파이썬으로 시뮬레이션하면 결과를 시각적으로 확인할 수 있습니다. 이 코드는 문제에 대한 직관을 확인하고 논리적 사고를 보강할 좋은 도구가 됩니다.
- 여기 간단한 파이썬 함수를 통해 문제를 반복 시뮬레이션하는 방법이 있습니다:
import random
def airplane_seat_simulation(trials=100000):
success_count = 0
for _ in range(trials):
seats = list(range(1, 101))
random.shuffle(seats)
if seats[-1] == 100:
success_count += 1
probability = success_count / trials
return probability
print("마지막 승객이 지정 좌석에 앉을 확률: ", airplane_seat_simulation())
학습의 의의와 적용
- '100석 비행기 문제'의 가장 큰 가치는 확률과 논리, 그리고 문제 분해 능력을 개발하게 돕는 데 있습니다. 이 과정에서 배우는 사고 방식은 다양한 분야에 적용될 수 있습니다.
- 예를 들어, 소프트웨어 개발 과정에서의 디버깅, 데이터 분석에서의 모델링, 혹은 일상적인 의사결정 등에도 활용될 수 있습니다. 복잡한 문제를 단순화하고 대칭적 논리를 이해하는 것은 모든 문제해결의 핵심입니다.
- 또한 이 문제는 퍼즐 자체의 재미로도 확률에 대한 흥미를 자극하며, 이를 통해 보다 깊은 수학적 개념을 탐구하는 계기가 됩니다.
- 비슷한 문제를 직접 만들어 풀어보는 것도 좋은 학습 방법입니다. 예컨대, 승객 수를 줄이거나 증가시키는 등 조건을 변형해 확률의 변화를 실험할 수 있습니다.
- 결론적으로, 이 문제는 단순하지만 깊이 있는 지식을 제공하며, 실제 기술 면접에서 강력한 도구로 활용할 수 있는 능력을 기르게 합니다.
맺음말
'100석 비행기 문제'는 단순한 퍼즐 같지만, 그 안에는 논리, 확률, 재귀적 사고의 중요한 교훈이 담겨 있습니다. 이를 통해 문제 해결 능력을 키우고, 더 큰 확률적 사고로 확장해보세요. 다음에는 다른 흥미로운 퍼즐로 직접 도전하고 이를 풀어나가는 여정을 즐겨보세요. 지금 바로 코드를 실행하거나 직접 계산하며 논리를 확인해보실 것을 추천합니다.
출처: https://medium.com/puzzle-sphere/can-you-solve-this-famous-interview-question-91d0db846935