사다리타기는 공평한가 — 직접 측정한 값
가로줄을 무작위로 그리는 흔한 구현을 모델링해 20만 회씩 돌려 봤습니다. 인원이 늘수록 특정 결과가 몇 배씩 자주 나왔습니다. 측정 조건과 수치를 그대로 적습니다.
바로 답
가로줄을 칸 사이에 무작위로 배치하는 구현은 인원이 늘수록 특정 결과가 자주 나옵니다. 결과를 먼저 균등 추첨하고 사다리를 그 결과에 맞춰 그리면 이 문제가 사라집니다.
근거: 5명·칸당 최대 1줄 조건에서 120가지 배열 중 34가지만 나왔고, 가장 자주 나온 배열은 20만 회 중 12,681회로 균등 기대값 1,667회의 7.6배(편차 6.6)였습니다. 같은 조건에서 균등 추첨 방식은 모든 배열이 1/120씩 나옵니다.
측정 결과
표가 잘려 보이면 좌우로 넘겨 전체 열을 확인하세요.
| 인원 | 칸당 최대 줄 | 나온 배열 / 전체 | 균등 기대 대비 최대 편차 | 최다 배열 빈도 |
|---|---|---|---|---|
| 3 | 1 | 5 / 6 | 1.00 | 50,228회 |
| 3 | 3 | 6 / 6 | 0.52 | 46,837회 |
| 5 | 1 | 34 / 120 | 6.61 | 12,681회 |
| 5 | 3 | 120 / 120 | 5.24 | 10,398회 |
편차 = |실측 빈도 ÷ 균등 기대값 − 1|의 최댓값. 기대값은 200,000 ÷ (인원!)입니다(3명 33,333회, 5명 1,667회). 3명·칸당 1줄에서 편차가 1.00인 이유는 한 배열이 한 번도 나오지 않았기 때문입니다. 본문의 ‘기대값의 N배’는 같은 비율을 실측 ÷ 기대값으로 쓴 값입니다(12,681 ÷ 1,667 = 7.6, 편차 6.6).
읽는 법
- 3명·칸당 1줄 — 6가지 배열 중 1가지(거꾸로 뒤집힌 배열)가 아예 나오지 않았습니다. 인원이 적어도 편향이 생깁니다.
- 5명·칸당 1줄 — 120가지 중 86가지가 한 번도 나오지 않았습니다. 가장 흔한 배열은 기대값의 7.6배(12,681 ÷ 1,667)입니다.
- 칸당 줄을 늘리면 모든 배열이 나오기는 하지만(5명·칸당 3줄에서 120/120) 빈도 차이는 오히려 기대값의 6.2배(편차 5.2)로 남습니다.
왜 이런 일이 생기나
사다리의 경로는 가로줄이 만드는 ‘교차의 순서’로 결정됩니다. 가로줄 높이를 무작위로 뽑으면 같은 높이 부근에 줄이 몰리거나, 서로 다른 칸 사이의 줄이 겹쳐 경로가 합쳐졌다 갈라집니다. 그 결과 어떤 배열에 도달하는 경로 조합의 수가 배열마다 달라집니다. 경로 수가 많은 배열일수록 자주 나옵니다.
이 측정에서 쓰는 모델은 다음과 같습니다. ① 인원 n명이면 칸 사이 간격은 n−1개 ② 각 간격에 가로줄을 0~k개 독립적으로 놓음 ③ 각 줄의 높이는 0~1 균등분포 ④ 높이 순서대로 인접한 두 칸을 교환 ⑤ 최종 배치를 결과로 기록. 코드는 같은 조건을 그대로 옮긴 것이며, 아래 시뮬레이터가 같은 모델을 브라우저에서 실행합니다.
이 사이트가 쓰는 방식
순서를 뒤집습니다. ① 결과 배열을 Fisher–Yates로 균등 추첨 ② 그 배열이 나오도록 가로줄을 배치. 표시되는 사다리는 실제로 그 배열에 도달하는 경로를 갖고, 배열의 확률은 인원과 무관하게 1/(인원!)입니다. 즉 사다리타기 도구에서 5명이면 120가지 배열이 모두 같은 확률로 나옵니다.
난수는 crypto.getRandomValues로 만듭니다. 브라우저의 암호학적 난수 생성기를 쓰므로 실행 시각이나 이전 결과에 따라 패턴이 생기지 않습니다.
직접 돌려보기
조건을 고르고 ‘시뮬레이션 실행’을 누르면 이 브라우저에서 계산합니다.
표본이 적으면 나오지 않은 배열이 늘어나 편차가 과대평가될 수 있습니다. 6명(720가지)에서는 2만 회로도 절반 이상이 나오지 않을 수 있으니, 인원이 많을 때는 표본 수를 5만 회로 올려 비교하세요.
한계와 주의
- 모델의 한계 — 실제 서비스는 가로줄 개수·높이 분포·최대 줄 수가 다를 수 있습니다. 이 측정은 “가로줄을 독립·균등 배치한다”는 흔한 규칙 하나를 모델링한 결과입니다.
- 지목하지 않음 — 특정 사이트나 앱의 구현을 측정하거나 평가하지 않았습니다.
- 재현성 — 표의 값은 고정 시드 196, 20만 회 실행 결과입니다. 시드를 바꾸면 소수점 아래 값은 달라지지만 도달 배열 수와 큰 편차는 유지됩니다.
- 용도 — 이 페이지는 구현 방식의 차이를 설명하기 위한 자료이며, 특정 추첨의 결과를 검증하는 도구가 아닙니다.
자주 묻는 질문
그럼 시중 사다리타기는 다 조작인가요?
아닙니다. 편향은 의도와 무관하게 배치 규칙에서 생깁니다. 개발자가 “가로줄을 무작위로 그린 뒤 결과를 읽는” 흔한 방식을 택하면 같은 현상이 나타납니다. 조작이라는 뜻이 아니라, 배열마다 확률이 다르게 나온다는 뜻입니다.
인원이 적으면 괜찮나요?
3명에서도 한 배열이 아예 나오지 않는 경우가 있었습니다. 인원이 적으면 편향의 크기는 작아 보이지만, 특정 배열이 0%인 문제는 그대로 남습니다.
이 페이지의 시뮬레이터는 무엇을 계산하나요?
같은 모델을 브라우저에서 실행해 도달한 배열 수, 균등 기대값 대비 최대 배율, 최다 배열의 빈도를 보여 줍니다. 서버로 아무것도 보내지 않습니다.
우리 서비스도 이 방식을 쓸 수 있나요?
결과 배열을 먼저 균등 추첨하고 화면을 그 결과에 맞춰 그리는 방식은 어느 언어에서나 구현할 수 있습니다. 핵심은 “결과를 먼저 정하고, 그림을 결과에 맞춘다”는 순서입니다.