ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION128 / 1500
알고리즘난이도 중하5분 답변 목표 · 보강본

32비트 난수에 나머지 연산을 해서 500개 중 하나를 고르면 항상 균등한가요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

난수 원천의 가능한 값 수가 선택 범위로 나누어떨어지지 않으면 일부 나머지가 더 자주 나올 수 있습니다. 이를 modulo bias라고 하며 균등한 정수 선택에는 rejection sampling 등을 사용할 수 있습니다.

동작 원리와 전제

작은 예로 0..7의 균등 난수를 3으로 나누면 0·1은 세 번, 2는 두 번 나타납니다. 범위의 배수인 마지막 경계 밖 값을 버리고 다시 뽑으면 각 나머지의 개수를 맞출 수 있습니다. 32비트에서도 같은 원리가 적용됩니다.

선택과 실패 처리

암호학적 난수 API는 예측 저항이 필요할 때 적합하지만 호출 실패·지원 환경·성능을 처리해야 합니다. 학습 셔플에서 보안 수준 난수가 필수는 아니어도 고정 seed와 재현 테스트를 구분해야 합니다. 잘못된 범위·0·상한 overflow를 검증합니다.

구체적인 사례와 검증

0..7을 3개로 나눌 때 6·7을 버리고 0..5만 사용하면 나머지 0·1·2가 각각 두 번씩 나옵니다. 이때 거절된 값을 다른 방식으로 임의 보정하면 다시 편향이 생길 수 있어 새 표본을 뽑습니다. 32비트 범위에서는 2^32를 JavaScript의 비트 연산으로 표현하면 signed 변환 문제가 생길 수 있으므로 정확한 수 표현과 범위를 확인합니다. 테스트용 고정 seed는 버그 재현에 유용하지만 운영의 질문 순서를 항상 같은 seed로 초기화하면 사용자에게 반복된 순서가 보입니다. 예측 가능성 요구와 공정한 범위 매핑을 별도로 선택하겠습니다.

범위가 1·2·500·최대값인 경우와 거절된 샘플을 고정 입력으로 시험합니다. 분포 검사는 편향을 찾는 데 도움이 되지만 드문 오류를 모두 증명하지는 않습니다. 난수 원천의 품질과 범위 변환의 정확성은 별도 단계입니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 핵심 구분: 난수 원천의 가능한 값 수가 선택 범위로 나누어떨어지지 않으면 일부 나머지가 더 자주 나올 수 있습니다.
  • 선택 조건: 암호학적 난수 API는 예측 저항이 필요할 때 적합하지만 호출 실패·지원 환경·성능을 처리해야 합니다.
  • 검증 기준: 범위가 1·2·500·최대값인 경우와 거절된 샘플을 고정 입력으로 시험합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • 균등한 원천 난수에 어떤 나머지 연산을 해도 결과가 균등하다고 한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 한 주기 중복 없는 순열을 만들 때 각 교환의 난수 범위는 어떻게 줄어드나요?
  • 길이를 모르는 입력에서 K개만 보관하며 균등 포함 확률을 어떻게 유지하나요?
  • 분산 ID의 충돌·정렬·노출 특성과 논리 요청 중복을 어떻게 구분하나요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기