본문 바로가기
모두계산

랜덤 뽑기

점심 메뉴, 순서 정하기 등 랜덤으로 하나를 뽑아줍니다.

어떤 계산인가요

후보를 여러 개 적어두면 그중 하나, 혹은 여러 개를 무작위로 골라준다. 점심 메뉴를 못 정하겠을 때, 발표 순서를 뽑을 때, 팀을 나누거나 이벤트 당첨자를 정할 때처럼 누군가 정하면 뒷말이 나올 법한 상황에 쓰기 좋다. 동작 원리는 단순하다. 항목들을 한 번 섞은(셔플) 뒤 앞에서부터 필요한 개수만큼 잘라낸다. 그래서 한 번 뽑을 때 같은 항목이 두 번 나오는 일은 없다.

섞을 때 쓰는 난수는 브라우저에 들어 있는 Math.random()(IEEE 754 배정밀도 부동소수점 기반 의사 난수)다. 일상 추첨에 쓰기엔 충분히 무작위적이지만 암호학적으로 안전한 난수는 아니다. 그러니 결과는 어디까지나 참고용으로 보고, 법적 효력이 필요한 공식 추첨에는 다른 방법을 쓰자. 입력한 항목과 뽑힌 결과는 전부 브라우저 안에서만 처리되며 서버로 넘어가지 않는다.

각 입력값의 의미

  • 항목 추가뽑기 후보가 될 텍스트다. Enter를 누르면 바로 등록되고, × 버튼으로 지울 수 있다. 앞뒤 공백은 알아서 떼고 저장한다.
  • 뽑을 개수한 번에 몇 개를 뽑을지 정한다. 후보 수보다 큰 값을 넣으면 후보 수에 맞춰 줄여서 처리하고, 비워두거나 숫자가 아닌 값이 들어오면 1로 본다.

어떻게 계산하나요

· 결과 = 셔플한 항목 배열에서 앞쪽 min(뽑을 개수, 후보 수)

· 섞는 방법은 [...items].sort(() => Math.random() - 0.5)로 배열 순서를 뒤섞습니다.

· 난수: 브라우저 Math.random(), 0 이상 1 미만 범위의 균등 분포 의사 난수입니다.

· 연출: 80ms 간격으로 20번 다시 섞기 때문에 결과가 확정되기까지 약 1.6초가 걸립니다(80ms × 20 = 1,600ms).

※ sort 기반 셔플은 정통 Fisher-Yates 방식보다 분포가 살짝 치우칠 수 있습니다. 일상 추첨용 참고치 정도로 보시면 됩니다.

예시 계산

점심 메뉴 1개 뽑기

김치찌개·라멘·파스타·돈까스·샐러드 5개를 넣고 뽑을 개수를 1로 두면, 5개를 섞은 다음 맨 앞 1개가 뽑힙니다. 메뉴 하나당 확률은 이론상 약 20%(1/5)인 셈입니다.

발표 조 2명 동시 추첨

팀원 6명을 넣고 뽑을 개수를 2로 하면, 6명을 섞은 뒤 앞 2명이 한꺼번에 뽑힙니다. 한 번 뽑는 동안 같은 사람이 두 번 걸리는 일은 없습니다.

뽑을 개수가 후보 수보다 클 때

후보는 3개뿐인데 뽑을 개수에 5를 넣으면 min(5, 3) = 3으로 줄어들어3개 전부가 무작위 순서로 나옵니다. 순서를 섞고 싶을 때 이 방식을 활용해도 됩니다.

결과가 뜻하는 것

팀원 6명을 넣고 2를 뽑았다고 하자. 🎉 결과 칸에 두 사람의 이름이 큰 글씨로 위아래 두 줄에 떨어진다. 둘 중 누가 위에 적혔든 의미는 같다. 섞은 배열을 앞에서부터 잘라낸 순서일 뿐, 첫 줄이 1등이라거나 우선권을 가진다는 뜻은 아니다. 한 줄만 뽑았다면 그 한 항목이 이번 추첨의 결과다.

같은 후보로 한 번 더 누르면 처음부터 다시 섞는다. 그래서 방금 나온 이름이 연달아 또 걸리는 일도 생기는데, 고장이 아니라 회차마다 따로 추첨하는 구조 탓이다. 직전 당첨자를 빼고 돌리고 싶다면 해당 항목의 × 버튼으로 목록에서 먼저 지우자. 한 번 나온 결과를 두고 운을 점치기보다는, 정하기 애매한 일을 깔끔하게 매듭짓는 용도로 가볍게 받아들이는 편이 맞다.

여기서 많이 헷갈립니다

  • 뽑을 개수를 후보 수보다 크게 적으면 그만큼 더 뽑힐 거라 생각하기 쉽지만, 실제로는 후보 수에 맞춰 줄어든다.
  • 같은 이름의 사람이나 메뉴를 두 번 넣으려다 등록이 안 되는 경우가 있다. 같은 텍스트는 중복으로 안 들어가니 소속이나 번호를 붙여 구분하자.
  • 항목에 공백을 무심코 넣어 “사과”와 “사과 ”를 다른 것으로 여기는 경우가 있는데, 앞뒤 공백은 떼고 저장하므로 가운데 글자가 같으면 한 항목으로 본다.
  • 뽑을 개수 칸을 비우면 0개가 나올 거라 기대하기도 하지만, 비어 있거나 숫자가 아니면 1로 처리되어 1개가 뽑힌다.

결과가 실제와 달라지는 경우

  • 특정 항목의 당첨 확률을 높이고 싶은(가중치) 경우. 여기서는 모든 항목을 똑같이 다루기 때문에 가중 추첨은 안 된다.
  • 공식 경품이나 복권처럼 법적 효력과 감사 추적이 필요한 추첨. 암호학적 난수가 아니라 적합하지 않다.
  • 수백에서 수천 개에 이르는 대량 항목을 다룰 때는 sort 기반 셔플 특성상 분포가 조금 치우칠 수 있어, 엄밀한 통계 실험용으로는 권하지 않는다.
  • 직전에 뽑힌 항목을 자동으로 빼고 싶은 경우. 매번 전체 후보를 다시 섞으므로 바로 앞 회차와 같은 항목이 또 나올 수 있다.

주의사항 / 예외 케이스

  • 일상적인 결정을 돕는 참고용 도구다. 법적 효력이 있는 추첨이나 복권, 계약 관련 결정에는 쓰지 말자.
  • 넣은 항목은 브라우저 메모리에만 남아 있어서, 페이지를 새로고침하면 모두 사라진다.
  • 같은 텍스트는 중복으로 추가되지 않는다. 동명이인을 가르려면 번호나 소속을 같이 적자(예: "김민수(1팀)", "김민수(2팀)").
  • 뽑을 개수에 후보 수보다 큰 값을 넣어도 후보 수에 맞춰 자동으로 줄어든다.
  • 추첨 연출이 도는 약 1.6초 동안에는 버튼이 잠기고, 후보가 하나도 없으면 추첨 자체가 실행되지 않는다.

궁금해할 만한 것

추첨 결과는 정말 무작위인가요?

브라우저의 Math.random()으로 만든 의사 난수를 써서 항목을 섞기 때문에, 일상 추첨에 쓰기엔 충분히 무작위적이다. 다만 통계적으로 고르게 균등하거나 보안·법적 추첨에 쓸 만한 난수는 아니니 참고용으로만 보자.

같은 항목이 여러 번 뽑힐 수 있나요?

한 번 뽑는 동안에는 안 된다. 후보를 섞은 다음 앞에서부터 잘라내는 구조라서 같은 항목이 두 번 걸리지 않는다. 단, 추첨을 다시 돌리면 새로 섞기 때문에 바로 앞 결과와 같은 항목이 또 나올 수 있다.

각 항목마다 당첨 확률을 다르게 줄 수 있나요?

지금은 모든 항목을 같은 확률로 다룬다. 특정 항목의 비중을 높이고 싶다면 같은 의미의 항목을 여러 개("당첨1", "당첨2" 식으로) 넣어 가중치를 흉내 낼 수는 있다. 다만 정식 가중 추첨 기능은 따로 없다.

항목 목록을 저장해 둘 수 있나요?

아직 저장 기능은 없다. 자주 쓰는 후보가 있다면 메모장 같은 곳에 적어두었다가 복사해서 붙여넣자. 새로고침하면 목록은 비워진다.

추첨에 약 1.6초가 걸리는 이유는 무엇인가요?

결과를 곧장 보여주는 대신 슬롯머신처럼 후보가 빠르게 바뀌는 맛을 내려고 80ms 간격으로 20번 다시 섞는다(80ms × 20 = 약 1.6초). 마지막에 한 번 더 섞은 값이 최종 결과로 고정된다.

추첨 결과가 서버로 전송되나요?

아니다. 추첨은 전부 브라우저(클라이언트) 안에서 이뤄지며, 입력한 항목도 뽑힌 결과도 서버로 보내거나 저장하지 않는다.

요율 마지막 업데이트 · 2026-06-03

콘텐츠 마지막 검토 · 2026-06-04

결과는 공개 기준으로 계산한 참고용 추정치이며 법적·세무적 효력이 없습니다. 면책 조항 · 오류 제보 yuseong2099@gmail.com