알아두면 좋은 내용
사다리타기 원리 — 가로줄 하나는 ‘자리 바꾸기’
참가자 N명이 위에서 출발해 사다리를 따라 내려가며 가로줄을 만나면 옆으로 이동, 결국 N개 결과 중 하나에 도착하는 게임입니다. 가로줄 하나는 이웃한 두 세로줄에 있는 사람의 자리를 맞바꾸는 동작과 같습니다. 위에서부터 이런 맞바꿈을 차례로 적용하므로 사다리 전체는 출발 N칸을 도착 N칸에 하나씩 짝지어 주는 ‘순열’이 되고, 두 사람이 같은 결과에 도착하거나 아무도 오지 않는 결과가 생기는 일은 구조적으로 일어나지 않습니다. 같은 높이에 가로줄을 이어 붙이지 않는 규칙도 그래서 있습니다 — 한 세로줄에서 좌우 가로줄을 동시에 만나면 갈 곳이 정해지지 않으니까요.
거꾸로, 원하는 배정은 무엇이든 가로줄로 만들 수 있습니다. 이웃끼리 자리만 바꿔도 어떤 순서든 정렬할 수 있기 때문(버블 정렬과 같은 원리)이고, 필요한 가로줄의 최소 개수는 그 배정에서 순서가 뒤바뀐 쌍의 수와 같습니다. 예를 들어 4명이 완전히 거꾸로 도착하는 배정은 4×3÷2 = 6개가 최소입니다.
본 도구가 사다리를 만드는 순서:
- 행 수는 참가자 × 3배(보통) 또는 × 5배(많이), 최소 8행 — 4명 보통 12행, 8명 보통 24행
- ① 누가 어느 결과로 갈지(도착 순열)를 Fisher-Yates 셔플로 먼저 균등하게 뽑습니다
- ② 위·아래 구간은 행마다 왼쪽부터 확률 50%(많이 60%)로 가로줄을 놓되 바로 옆 칸에는 놓지 않습니다
- ③ 가운데 N행에는 홀짝 교환 정렬(odd-even transposition sort)로 가로줄을 놓아, 전체 도착이 ①의 순열과 정확히 같아지게 맞춥니다
- 가로줄은 공개 전까지 숨겨 두어 눈으로 경로를 미리 따라가 볼 수 없습니다
일반 사다리의 위치 편향 — 순열을 먼저 뽑는 이유
가로줄을 무작위로만 뿌리면 한 사람이 지나는 가로줄 수가 한정돼 있어 출발한 자리 근처에서 멈출 가능성이 큽니다. 아래 표는 이 도구와 같은 가로줄 규칙(행마다 왼쪽부터 확률 50%, 인접 금지)을 순열 보정 없이 썼을 때, 맨 왼쪽(1번)에서 출발한 사람이 바로 아래 결과(1번)와 반대쪽 끝 결과(N번)에 도착할 확률입니다. 행마다의 이동 확률을 행 수만큼 곱해 정확히 계산한 값이며, 이 페이지를 만들 때 자동으로 다시 계산됩니다.
| 인원 | 이 도구 (모든 칸) | 일반 사다리 · 보통 바로 아래 / 반대 끝 | 일반 사다리 · 많이 바로 아래 / 반대 끝 |
|---|---|---|---|
| 4명 | 25.0% | 28.1% / 21.6% (12행) | 25.5% / 24.4% (20행) |
| 6명 | 16.7% | 22.5% / 10.8% (18행) | 18.3% / 15.1% (30행) |
| 8명 | 12.5% | 19.6% / 5.7% (24행) | 15.1% / 10.0% (40행) |
| 12명 | 8.3% | 16.1% / 1.7% (36행) | 12.1% / 4.8% (60행) |
| 16명 | 6.3% | 14.0% / 0.5% (48행) | 10.4% / 2.4% (80행) |
8명·24행이면 바로 아래 결과가 19.6%로 균등(12.5%)의 1.6배이고, 반대쪽 끝은 5.7%에 그칩니다. 인원이 늘수록 격차가 벌어져 16명이면 반대쪽 끝에 닿을 확률이 0.5%까지 떨어집니다. 행을 늘리면(‘많이’) 편향이 줄지만 사라지지는 않습니다. 그래서 이름을 적는 순서가 결과를 좌우하게 되는데, 이 도구는 도착 순열을 먼저 뽑고 가로줄을 그에 맞추기 때문에 출발 위치·입력 순서·난이도와 관계없이 모든 칸이 정확히 1/N입니다.
결과 공개 — 3가지 방법
🖱️ 클릭 개별 공개
이름을 클릭하면 그 사람의 경로만 그려지며 공개·숨김 (느림·빠름 그리기 속도 선택)
🔁 역추적 공개
결과를 클릭하면 그 결과로 도착한 사람을 거꾸로 찾아 경로를 표시
👥 한 번에 공개
[한 번에 공개] 버튼으로 모든 참가자 경로를 동시에 표시
참가자·결과를 입력하는 즉시 사다리에 반영되지만 가로줄은 공개 전까지 숨겨져 인원·세로줄 구조만 보입니다. 공개한 뒤 이름이나 결과 칸을 고치면 공개 상태가 닫혀, 추첨 후에 결과를 바꾼 것처럼 보이는 일을 막습니다. 당첨 하나를 두고 긴장감을 살리고 싶다면 꽝부터 한 명씩 클릭하거나, 당첨 칸을 눌러 역추적으로 마지막에 공개하는 방식이 잘 맞습니다.
시크릿 산타 — 자기 배정 피하기의 확률
[선물 교환 (시크릿 산타)] 템플릿을 고르거나 옵션에서 [자기 배정 피하기]를 켜면, 참가자 이름과 똑같은 결과 칸이 그 사람에게 가지 않도록 가로선을 만듭니다. 방식은 단순합니다 — 균등한 사다리를 만든 뒤 본인 배정이 하나라도 있으면 버리고 다시 뽑습니다(최대 200회). 조건에 맞지 않는 배정만 버리므로 남은 배정(수학 용어로 완전순열)끼리는 여전히 모두 같은 확률입니다. 4명이면 가능한 9가지 배정이 각각 1/9입니다.
| 인원 | 가능한 배정 (N!) | 자기 배정 없는 배정 | 비율 | 평균 생성 횟수 |
|---|---|---|---|---|
| 2명 | 2 | 1 | 50.0% | 2.00회 |
| 3명 | 6 | 2 | 33.3% | 3.00회 |
| 4명 | 24 | 9 | 37.5% | 2.67회 |
| 5명 | 120 | 44 | 36.7% | 2.73회 |
| 6명 | 720 | 265 | 36.8% | 2.72회 |
| 8명 | 40,320 | 14,833 | 36.8% | 2.72회 |
| 10명 | 3,628,800 | 1,334,961 | 36.8% | 2.72회 |
| 16명 | 20,922,789,888,000 | 7,697,064,251,745 | 36.8% | 2.72회 |
인원이 늘어도 자기 배정 없는 비율은 약 36.8%(1/e)로 수렴해, 평균 2~3번 생성(재생성 1~2번)이면 끝납니다. 200번 안에 끝나지 않을 확률은 가장 불리한 3명(33.3%)일 때도 (2/3)의 200제곱(약 6×10-36)으로, 사실상 0입니다. 실제로 쓸 때 헷갈리기 쉬운 점은 다음과 같습니다.
- 이름은 글자 그대로 비교합니다 — ‘김민수’와 ‘김민수 ’(끝 공백)·‘민수’는 다른 이름으로 봐서 피해 주지 않습니다. 결과 칸을 참가자 칸과 똑같이 적으세요.
- 동명이인은 구별할 수 없으니 ‘김민수A’처럼 표기를 나누세요.
- 공개 전에 명단을 고치면 기존 가로선이 그대로라 본인 배정이 생길 수 있습니다. 이때는 경고와 함께 [가로선 새로 만들기] 버튼이 나타납니다.
- 옵션을 끄면 순수 균등 추첨이라, 4명 기준 누군가 자기 이름을 뽑을 확률이 62.5%입니다.
6가지 빠른 시작 템플릿
🍱 점심 메뉴
못 정할 때 무작위 선택 — 김치찌개·비빔밥·돈가스·국밥
🧹 청소 당번
공정한 역할 분담 — 거실·주방·화장실·쓰레기
😅 벌칙 뽑기
게임·내기 벌칙 — 커피·꽝·재밌는 표정
🎁 선물 교환 (시크릿 산타)
자기 배정 방지 자동 — 본인 카드만 클릭해 확인
🎤 발표 순서
학교·회사 발표 순서 정하기
🍻 회식 분담
비용·역할 무작위 — 많이/보통/조금/꽝(공짜)
벌칙 뽑기처럼 같은 결과(꽝)가 여러 칸이면 당첨 확률은 ‘그 결과 칸 수 ÷ 인원’입니다. 6명 중 ‘커피 사기’ 1칸이면 1/6(약 16.7%)이고, 벌칙을 2칸으로 늘리면 1/3이 됩니다.
옵션 — 애니메이션 속도·가로줄 난이도
애니메이션 속도
- · 느림 — 경로 그리기 2초 (긴장감 ↑)
- · 빠름 — 0.7초 (빠른 확인)
가로줄 난이도
- · 보통 — 참가자 × 3배 행 (최소 8행, 권장)
- · 많이 — 참가자 × 5배 행, 가로줄 더 촘촘 (보기만 복잡해지고 확률은 같음)
참가자마다 16가지 동물 캐릭터(🐶 🐱 🐰 🦊 …)와 경로 색이 자동으로 붙습니다. 색은 색상환을 인원수로 똑같이 나눈 HSL 값이라 누가 어디로 갔는지 한눈에 구별되고, 최대 인원이 16명이라 캐릭터가 겹치지 않습니다. 인원이 많아 세로줄 간격이 좁아지면 휴대폰에서는 사다리를 옆으로 스크롤해 확인하세요.
사다리타기 vs 다른 추첨
사다리타기
- · 참가자 ↔ 결과 매칭 (N:N)
- · 시각적 재미 강함
- · 모든 참가자에게 결과 분배
- · 선물 교환·역할 분담 적합
랜덤 추첨기 (별도 도구)
- · 1명 또는 N명 선택
- · 가중치·룰렛 가능
- · 팀 나누기 전용
- · 한 항목 선택 적합
언제 사다리타기? — 모든 참가자에게 다른 결과를 배정해야 할 때, 시각적 재미가 우선일 때, 선물 교환·발표 순서. 언제 랜덤 추첨기? — 단순 1명 뽑기, 가중치, 팀 나누기.
Math.random()으로, 놀이·당번 정하기에는 충분하지만 암호학적으로 안전한 난수는 아니며 추첨 과정을 나중에 검증할 기록도 남지 않습니다. 상금·경품처럼 이해관계가 큰 추첨은 참가자 앞에서 공개로 진행하고 결과 화면을 캡처하거나 [결과 텍스트 복사]로 바로 공유해 두세요.자주 묻는 질문
사다리타기는 정말 공정한가요?
Math.random() 기반 Fisher-Yates), ② 그 순열이 되도록 가로줄을 배치하며, 나머지 가로줄은 평소처럼 무작위로 채웁니다. ③ 인접 가로줄은 만들지 않고(사다리 규칙), ④ 모든 참가자가 서로 다른 결과에 1:1로 도착합니다. 그래서 시작 위치·입력 순서·난이도와 관계없이 각 참가자가 각 결과에 닿을 확률은 모두 1/N로 같습니다. 같은 명단으로 새 추첨을 하려면 [가로선 새로 만들기]를 누르세요.사다리타기에서 유리한 시작 위치가 있나요?
시크릿 산타(선물 교환)는 어떻게 하나요?
참가자와 결과 개수가 다르면 어떻게 되나요?
결과를 미리 정해놓을 수 있나요?
가로줄을 '많이'로 바꾸면 더 공정해지나요?
자주 쓰는 명단을 저장해 두고 다시 쓸 수 있나요?
참고 자료
- MDN — Math.random()(새 창)developer.mozilla.org
- OEIS A000166 — 완전순열 수(새 창)oeis.org
- 계산 기준
- 도구 알고리즘(균등 순열 선추첨 + 홀짝 교환 정렬 배치) · 위치 편향·완전순열 표는 빌드 시 도구와 같은 규칙으로 계산
- 오류 제보
- 결과가 다르면 contact@youtil.kr로 입력 조건을 알려 주세요. 평일 기준 1~3일 안에 답변합니다.