랜덤 뽑기/추첨기
항목을 입력하면 랜덤으로 선택하거나 순서를 섞습니다.
랜덤 선택기/추첨기 -- Fisher-Yates 알고리즘 기반 공정한 무작위 뽑기
랜덤 선택기는 여러 항목 중에서 무작위로 하나를 선택하거나, 전체 항목의 순서를 랜덤으로 섞어주는 도구입니다. 컴퓨터의 의사 난수 생성기(PRNG, Pseudo-Random Number Generator)를 활용하여 사람의 편향 없이 공정한 추첨 결과를 제공합니다. 교실에서 발표자를 선정하거나, 조별 팀을 구성하거나, 이벤트 당첨자를 추첨하는 등 다양한 상황에서 객관적이고 투명한 결과를 얻을 수 있습니다. 줄바꿈으로 항목을 구분하여 입력하면 즉시 사용할 수 있습니다.
Fisher-Yates 셔플 알고리즘의 원리
이 도구의 "전체 순서 섞기" 기능은 Fisher-Yates(Knuth) 셔플 알고리즘을 사용합니다. 1938년 Ronald Fisher와 Frank Yates가 고안하고, Donald Knuth가 컴퓨터 과학에 적용한 알고리즘으로, 모든 순열(permutation)이 동일한 확률로 생성되는 것이 수학적으로 증명되어 있습니다.
| 단계 | 동작 | 시간 복잡도 |
|---|---|---|
| 1 | 배열의 마지막 요소부터 시작 | O(n) -- 항목 수에 비례 |
| 2 | 0부터 현재 인덱스 사이의 랜덤 위치 선택 | |
| 3 | 현재 요소와 랜덤 위치 요소를 교환(swap) |
n개 항목의 순열은 총 n! (n 팩토리얼) 가지입니다. 예를 들어 5개 항목이면 5! = 120가지 순열이 있고, Fisher-Yates는 이 120가지가 모두 동일한 확률(1/120)로 생성됩니다.
Math.random vs crypto.getRandomValues -- 공정성 수준
| 방식 | 난수 품질 | 적합 용도 | 속도 |
|---|---|---|---|
| Math.random() | PRNG (의사 난수) | 일반 추첨, 게임, 교육 | 매우 빠름 |
| crypto.getRandomValues() | CSPRNG (암호학적 난수) | 보안, 암호화, 복권 | 약간 느림 |
이 도구는 JavaScript의 Math.random()을 사용합니다. 교실 발표자 선정, 조 편성, 일반 이벤트 추첨 등 일상적 용도에는 충분히 공정합니다. 법적 효력이 필요한 추첨(복권, 경품)에는 CSPRNG 기반 시스템을 사용하세요.
교육 현장 활용 시나리오
시나리오 1 -- 발표자 선정: 반 학생 이름을 줄바꿈으로 입력하고 "랜덤 뽑기"를 클릭하면 공정하게 발표자가 선정됩니다. 교사의 의도적 선택이라는 불만을 방지합니다.
시나리오 2 -- 조별 과제 팀 편성: 전체 학생 이름을 입력하고 "전체 순서 섞기"로 섞은 후, 위에서부터 4명씩 나누면 랜덤 팀이 구성됩니다.
시나리오 3 -- 좌석 배치: 좌석 번호를 입력하고 순서를 섞어 학생 번호순으로 배정하면 랜덤 좌석 배치가 완성됩니다.
시나리오 4 -- 퀴즈 문제 순서: 문제 번호를 입력하고 순서를 섞으면, 학생마다 다른 순서의 시험지를 만들 수 있습니다.
시나리오 5 -- 학교 행사 경품 추첨: 참가자 이름을 입력하고 순차적으로 뽑기를 실행하면 투명한 경품 추첨이 가능합니다.
일상생활 활용 사례
- 점심 메뉴 결정: 선택지(짜장면, 김치찌개, 돈까스, 비빔밥)를 입력하고 랜덤 뽑기로 고민 해결
- 회사 회의 발표 순서: 팀원 이름을 입력하고 전체 순서 섞기로 공정한 발표 순서 결정
- 여행지 선택: 후보 여행지를 입력하고 랜덤으로 다음 여행지 결정
- 봉사활동 역할 배분: 역할 목록을 인원수만큼 입력하고 섞어서 배분
공정한 추첨을 위한 팁
- 추첨의 투명성을 위해 참가자들이 함께 보는 화면에서 실행하는 것을 권장합니다.
- 중복 제거 옵션을 켜면 같은 항목이 여러 번 입력되어도 1회만 포함됩니다.
- 결과에 이의가 있을 경우, 3회 추첨 후 최빈값을 채택하는 방법도 있습니다.
- 대규모 추첨(100명 이상)에도 Fisher-Yates 알고리즘은 O(n) 시간에 처리되므로 즉시 결과가 나옵니다.
관련 도구
수업 시간 관리에는 뽀모도로 타이머를 활용하세요. 학생 이름으로 더미 데이터를 생성하려면 더미 데이터 생성기가 유용합니다. 학사 일정을 확인하려면 학사 일정 계산기를 참고하세요.
참고 자료
- Knuth, D.E. (1997). The Art of Computer Programming, Volume 2: Seminumerical Algorithms
- Fisher, R.A. & Yates, F. (1938). Statistical Tables for Biological, Agricultural and Medical Research
- MDN Web Docs -- Math.random(): developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/random