Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 풀어보는 비행기 좌석 셔플 문제: 마지막 승객이 지정된 좌석에 앉을 확률

문제 설명

비행기에 n개의 좌석이 있다고 가정해 봅시다. 첫 번째 승객은 항공권을 잃어버려서 남은 좌석 중 하나를 무작위로 선택합니다. 나머지 승객들은 각자 자신의 항공권을 가지고 있지만, 자신에게 배정된 좌석이 이미 다른 사람이 차지하고 있다면 비어 있는 좌석 중 하나를 무작위로 선택하게 됩니다. 이때 마지막 승객이 자신에게 배정된 좌석에 앉게 될 확률을 구하는 것이 이 문제의 목표입니다.

예를 들어 입력이 n = 5라면 출력은 0.5(50%)입니다. 흥미롭게도 승객이 두 명 이상인 경우 답은 항상 일정합니다. 마지막 승객은 결국 제자리에 앉거나 못 앉거나 둘 중 하나이기 때문입니다. 반면 n = 1인 경우에는 유일한 승객이 곧 마지막 승객이므로 확률은 100%가 됩니다.

왜 항상 50%일까요?

이 문제의 핵심 아이디어는 다음과 같습니다. 누군가 무작위로 좌석을 고르는 상황은 언젠가 반드시 '첫 번째 승객의 원래 좌석' 또는 '마지막 승객의 좌석' 중 하나가 먼저 차지되는 순간에 종결됩니다. 그 외의 다른 좌석이 선택되더라도 해당 좌석의 주인 역시 무작위로 새 좌석을 고르게 되므로, 선택 과정은 계속 이어지다가 결국 위의 두 좌석 중 하나로 귀결됩니다. 두 좌석이 선택될 가능성은 대칭적으로 동일하기 때문에, 마지막 승객이 제자리에 앉을 확률은 정확히 50%입니다.

해결 접근 방법

  • n이 1보다 크면 "50%"를 반환하고, 그렇지 않으면(n = 1) "100%"를 반환합니다.

예제 코드

아래 구현 예시를 통해 더 잘 이해해 보겠습니다.

def solve(n):
   return "50%" if n > 1 else "100%"

n = 5
print(solve(n))

입력

5

출력

50%