CodeKitHub
생성기 도구

무료 리스트 랜덤화 도구

마지막 업데이트:

이름, 할 일, 응모자 명단 등 어떤 목록이든 한 줄에 하나씩 붙여넣으면, 진짜 공정한 Fisher-Yates 셔플로 순서를 무작위로 섞어 드립니다. 당첨자 뽑기 모드를 켜면 목록 전체를 섞지 않고 N개만 무작위로 뽑을 수 있어, 경품 당첨자를 정하거나 전체 순서를 공개하지 않고 무작위 배정을 할 때 유용합니다.

이 도구는 무엇인가요?

리스트 랜덤화 도구는 항목들을 무작위 순서로 재배열하거나, 그중 일부를 무작위로 뽑아내는 도구입니다. 까다로운 부분은 편향 없이 이 작업을 하는 것입니다 — 랜덤 비교 함수로 배열을 정렬하는 흔한 방식은 특정 순서가 다른 순서보다 훨씬 더 자주 나오는 편향된 분포를 만들어냅니다.

이 도구는 Fisher-Yates(더스텐펠드) 셔플 알고리즘을 사용합니다. 이는 균일한 무작위 순열을 만드는 표준 방법으로, 목록의 모든 가능한 순서가 동일한 확률로 나오도록 수학적으로 보장합니다.

왜 사용해야 할까요?

  • 진짜로 편향 없는 셔플 — 결과를 왜곡하는 흔한 안티패턴인 sort(() => Math.random() - 0.5)가 아니라 Fisher-Yates를 사용합니다.
  • 당첨자 뽑기 모드: 목록 전체를 섞는 대신 정확히 N개의 항목만 무작위로 뽑습니다. 경품 추첨이나 이벤트에 적합합니다.
  • 셔플 전 중복 제거 옵션 — 실수로 중복이 들어간 목록에 유용합니다.
  • 어떤 텍스트든 사용 가능 — 이름, 할 일, 티켓, 상품 등 한 줄에 하나씩.
  • 프라이버시 보호: 셔플은 전적으로 브라우저 안에서 이루어지며 아무것도 업로드되지 않습니다.

사용 방법

  1. 목록을 한 줄에 하나씩 입력창에 붙여넣습니다.
  2. 목록에 중복이 있을 수 있다면 "섞기 전 중복 제거" 옵션을 선택적으로 체크합니다.
  3. 전체를 재배열하려면 그냥 Shuffle을 클릭합니다. 당첨자를 뽑으려면 N개 뽑기 옵션을 체크하고 뽑을 개수를 설정합니다.
  4. 결과를 복사하세요 — Shuffle을 다시 클릭하면 언제든 새로운 무작위 순서나 새로운 추첨 결과를 얻을 수 있습니다.

예시

입력

Alice
Bob
Charlie
Diana
Ethan

결과

Charlie, Ethan, Alice, Diana, Bob처럼 무작위로 재배열된 목록 — Shuffle을 클릭할 때마다 매번 달라집니다.

당첨자 뽑기 모드를 2로 설정하면 같은 입력에서 Ethan과 Alice만 뽑힐 수도 있습니다 — 이는 섞인 목록의 앞 2개를 자른 것이 아니라 독립적인 2개 무작위 추첨입니다.

단순한 셔플 방식이 편향된 결과를 만드는 이유

sort(() => Math.random() - 0.5)는 얼핏 맞아 보이지만 사실은 아닌 흔한 트릭입니다. 정렬 알고리즘이 비교 함수를 특정한 횟수와 패턴으로 호출한다는 것에 의존하는데, 실제 정렬 구현들은 이를 보장하지 않습니다. 실질적인 결과는 특정 순서가 다른 순서보다 더 자주 나오는 셔플입니다 — 한 번 눈으로 보기엔 티가 안 나지만 여러 번 반복하면 통계적으로 측정 가능합니다.

Fisher-Yates는 이 문제 자체를 우회합니다. 정렬 알고리즘에게 간접적으로 무작위성을 만들어 달라고 요청하는 대신, 각 위치를 남은 위치 중 무작위로 고른 위치와 정확히 한 번씩 직접 교환합니다 — 이는 언어의 정렬 구현과 무관하게 균일함이 증명된 방식입니다.

랜덤 숫자 생성기 · UUID 생성기

자주 묻는 질문

왜 array.sort(() => Math.random() - 0.5)를 그냥 쓰면 안 되나요?

그 한 줄짜리 코드는 잘 알려진 안티패턴입니다. 자바스크립트의 sort()는 모든 요소 쌍이 같은 횟수만큼 비교된다는 것을 보장하지 않기 때문에, 결과 순서가 특정 순열 쪽으로 측정 가능할 만큼 편향됩니다 — 일부 항목이 진짜 무작위보다 앞이나 뒤에 위치할 확률이 더 높아집니다. Fisher-Yates는 구조적으로 이 문제를 완전히 피하며, 이 도구가 실제로 구현하고 있는 알고리즘입니다.

정말로 편향 없이 섞이는 건가요?

네. Fisher-Yates는 목록을 한 번 순회하면서 매 단계마다 현재 항목을 아직 섞이지 않은 나머지 부분에서 균일하게 무작위로 고른 항목과 교환합니다. 이는 좋은 난수 소스(자바스크립트의 Math.random())가 주어졌을 때 모든 가능한 순서가 동일한 확률로 나온다는 것이 수학적으로 증명된 방식입니다.

셔플 모드와 당첨자 뽑기 모드는 뭐가 다른가요?

셔플 모드는 목록의 모든 항목을 재배열해서 전부 새로운 순서로 보여줍니다. 당첨자 뽑기 모드는 N개의 항목만 무작위로 뽑아 그것만 보여줍니다 — 전체 재배열 목록을 공개하지 않고 정해진 수의 당첨자나 샘플만 선택하고 싶을 때 유용합니다.

실제 경품 추첨이나 이벤트에 사용해도 되나요?

네, 비공식적인 경품 이벤트나 추첨에는 무작위성이 진짜로 균일하기 때문에 잘 작동합니다. 금전적 상품이 걸린 법적으로 규제되는 경품 행사라면 지역 규정을 확인하세요 — 일부 관할 지역은 특정한 감사 가능한 추첨 절차를 요구합니다.

중복 제거를 하면 원래 목록도 바뀌나요?

아니요 — 중복 제거는 체크박스가 켜져 있을 때만 셔플 결과에 영향을 주며, 원본 목록은 그대로 유지됩니다. 옵션을 켜고 끄면서 다시 섞어도 목록을 다시 입력할 필요가 없습니다.

관련 도구