모르는 사람끼리 벤치에 앉으면 몇 명이나 앉을 수 있을까
낯선 사람 옆에는 한두 칸 띄우고 앉는 것이 예의입니다. 모두가 그렇게 하면 벤치가 알맞게 채워질 것 같습니다. 그런데 한 명씩 마음 가는 대로 앉게 하면, 아직 빈 자리가 한가득인데도 "앉을 곳이 없네" 하며 돌아가는 사람이 생깁니다. 아무도 잘못하지 않았는데 자리가 이렇게 낭비되는 까닭은 무엇일까요?
모델은 이렇게 움직입니다
- 벤치에 자리가 n석 한 줄로 있고, 낯선 사람이 한 명씩 도착합니다. 앉은 사람의 양옆 g칸은 비워 두어야 해서, 그 안의 빈 자리(빨간 ×)에는 앉을 수 없습니다.
- 같은 사람들이 네 가지 방식으로 앉습니다. 무작위(앉을 수 있는 자리 중 아무 곳), 가장 먼 자리(앉은 사람에게서 가장 먼 곳), 끝자리 먼저(끝이 비었으면 거기, 아니면 무작위), 정돈(왼쪽부터 g+1칸 간격으로 빽빽하게).
- 앉을 곳이 없으면 그 사람은 돌아갑니다. 정돈해서 앉으면 최대 ⌈n÷(g+1)⌉명이 앉을 수 있고, 이것이 기준선입니다. 아래 직접 앉혀 보기에서는 처음 몇 명을 여러분이 앉히고 나머지는 무작위로 들어옵니다.
직접 돌려보기
① 같은 사람들, 네 가지 앉는 방식
위에서부터 무작위, 가장 먼 자리, 끝자리 먼저, 정돈입니다. 사람이 들어올 때마다 네 줄이 함께 움직입니다. 빨간 ×는 비어 있지만 앉을 수 없는 자리, 굵은 테두리는 방금 앉은 사람입니다.
② 직접 앉혀 보기
자리를 눌러 처음 몇 명을 앉혀 보세요(초록은 앉을 수 있는 자리, 빨강은 너무 가까운 자리). 그다음 버튼을 누르면 나머지는 무작위로 들어옵니다. 처음 몇 명을 잘 앉히면 결과가 달라질까요?
자리를 눌러 앉혀 보세요.
③ 벤치가 길어지면
가로는 벤치의 자리 수, 세로는 앉은 비율입니다. 파란 점은 시뮬레이션 평균, 초록 선은 정확한 기댓값, 빨간 점선은 아주 긴 벤치의 이론값, 회색은 정돈했을 때의 최대입니다.
④ 앉는 방식에 따라
지금 설정에서 방식마다 끝까지 채웠을 때 앉는 사람 수의 평균(수백 판)입니다. 초록 점선이 정돈했을 때의 최대입니다. 똑똑해 보이는 "가장 먼 자리"가 항상 더 낫지는 않습니다.
⑤ 간격을 넓히면 낭비도 늘까
가로는 비워 두는 칸 수, 세로는 무작위로 앉았을 때 정돈 대비 앉는 비율입니다. 초록은 지금 벤치 길이의 정확한 기댓값, 빨강은 아주 긴 벤치입니다. 간격이 있기만 하면 항상 정돈보다 덜 앉습니다.
이 결과가 말하는 것, 말하지 않는 것
말하는 것:
- 모두가 협력해 차곡차곡 앉으면 더 많이 앉고, 각자 마음대로 앉으면 같은 벤치에서도 덜 앉아요. 간격이 1칸이면 정돈은 50%, 무작위는 43.2%예요.
- 먼저 앉은 사람 옆 빈칸은 못 쓰고, 남은 틈은 한 사람이 앉기엔 모자라요. 30석에 간격 2칸이면 정돈하면 10명, 무작위로는 평균 8.6명이 앉았어요.
- 간격이 넓을수록 앉는 비율 자체가 줄어요. 2칸이면 27.5%, 3칸이면 20.1%예요. 빈자리가 있는데도 못 앉는 건 누구의 잘못이 아니라 앉는 방식에서 생기는 낭비일 수 있어요.
- 그렇다면 더 많이 앉으려면? 이 모델에선 앉는 자리보다 간격이 훨씬 컸어요(2칸→1칸: 27.5%→43.2%). 끝자리나 가장 먼 자리부터 앉기는 8.6명에서 8.9명으로 조금 나았어요.
상세 설명
말하는 것: 간격 1칸이면 아주 긴 벤치에서 무작위로 앉은 사람은 자리의 43.2%(이론 (1−e−2)/2)로, 정돈했을 때의 50%보다 적었습니다(시뮬레이션 43.3%). 간격 2칸이면 27.5%(정돈 33.3%), 3칸이면 20.1%(정돈 25.0%)였습니다. 자리 30개, 간격 2칸에서는 정돈하면 10명이 앉지만 무작위로는 평균 8.6명이었고(정확한 기댓값 8.61명), 가장 먼 자리는 8.9명, 끝자리 먼저는 8.9명이었습니다. 아무도 규칙을 어기지 않았는데도 정돈했을 때에 비해 약 14~20%의 자리가 놓쳐졌습니다(간격 1~3칸, 긴 벤치).
말하지 않는 것:
- '정돈'은 모두가 도착 순서를 알고 협력할 때만 가능한 이상적인 기준선이에요. 현실에서 이렇게 앉을 수 있다는 뜻이 아니에요.
- 한 줄 벤치, 모두 같은 간격, 한 명씩 차례로 도착한다는 단순한 모델이에요. 일행과 붙어 앉거나 간격이 사람마다 다른 경우는 실제로 관찰해 봐야 해요.
상세 설명
말하지 않는 것: 실제 대기실이나 지하철의 모든 것을 설명하는 것이 아닙니다. 이 모델은 한 줄짜리 벤치, 서로 모르는 사람, 엄격한 최소 간격, 한 명씩 차례로 도착하는 가정으로 만든 이 프로젝트의 단순화된 모델입니다. 실제 사람들은 일행과 붙어 앉고, 간격이 사람마다 다르고, 앉은 사람이 자리를 옮기기도 하며, 문화와 상황에 따라 앉는 방식이 다릅니다. "정돈"은 모두가 도착 순서를 알고 협력할 때만 가능한 이상적인 기준선입니다.
이론적 근거와 구현 메모
- 모델의 뿌리: 이 문제는 물리·수학의 무작위 순차 흡착(random sequential adsorption, RSA), 그중에서도 1차원 렌니 주차 문제와 같은 구조입니다. Rényi (1958)가 도로에 길이가 같은 자동차를 무작위 위치에 차례로 세우는 문제를 풀었고, Flory (1939)는 고분자에서 이웃한 자리끼리 반응하는 같은 구조를 먼저 다뤘습니다. 한 번 놓이면 움직이지 않고 겹칠 수 없다는 것이 핵심입니다.
- 핵심 가정과 수식: 앉은 사람이 양옆 g칸을 막으므로, 사람 한 명은 길이 g+1짜리 막대 하나를 놓는 것과 같습니다. 긴 벤치에서 앉는 비율은
∫0∞ exp(−u − 2·Σj=1..g (1−e−ju)/j) du이고, g=0이면 1, g=1이면 (1−e−2)/2 ≈ 0.432입니다. 길이 n인 벤치의 기댓값은f(n) = 1 + (1/n)·Σi [f(i−1−g) + f(n−i−g)]로 구합니다. 슬라이더 n, g가 이 식의 n, g입니다. - 이 프로젝트의 단순화: 원 문제는 연속적인 길이이고, 이 페이지는 칸이 나뉜 좌석입니다. "가장 먼 자리", "끝자리 먼저", "정돈"은 이 프로젝트가 정한 앉는 방식이고 이론이 있는 것은 무작위뿐입니다. 도착하는 사람 수, 기본값(30석, 2칸, 24명), 사람마다 같은 간격을 둔다는 가정은 이 프로젝트의 설계입니다.
- 이론값과 시뮬레이션:
node tools/validate-seating.js결과, 긴 벤치(2,000석, 200판)에서 이론 대 시뮬레이션은 간격 1칸 0.4323 대 0.4327, 2칸 0.2746 대 0.2749, 3칸 0.2010 대 0.2009였습니다. 유한한 벤치의 정확한 기댓값도 시뮬레이션(5,000판)과 맞았습니다(24석 1칸 10.673 대 10.679명, 30석 2칸 8.609 대 8.600명). 앉은 사람 사이 간격 위반은 0건이었습니다. - 더 읽을거리: Rényi, A. (1958), "On a one-dimensional problem concerning random space-filling", Publ. Math. Inst. Hungarian Acad. Sci.; Flory, P. J. (1939), J. Am. Chem. Soc. 61, 1518; Evans, J. W. (1993), "Random and cooperative sequential adsorption", Reviews of Modern Physics 65, 1281 (개설).
- 시뮬레이션은 시드 난수(mulberry32)를 쓰고 같은 시드면 같은 결과가 나옵니다. 네 줄은 같은 도착 인원으로 각자 자기 난수를 씁니다. 통계 카드와 ④번 그래프는 설정마다 300판, ③번 그래프의 점은 벤치 길이마다 150판의 평균입니다.
- 검증은
node tools/validate-seating.js로 할 수 있습니다. 앉는 방식은site/experiments/seating/sim.js의pick함수에 있습니다.