MAX 까지의 중복되지 않는 난수를 생성할때 이와 같은 방법을 사용한다.

cnt = MAX;
for (i = 0; i < MAX; i++)
    n[i] = i;
for (j = 0; j < loop_cnt; j++) {
    swap(n[rand() % cnt], n[--cnt]);
    printf("%d", n[cnt]);
}

출처 : http://kldp.org/node/73442

2 Comments on 중복되지 않는 난수 생성 알고리즘

  1. 김동준 says:

    코드를 보다가 궁금한 것이 생겼습니다. 코드 중에서
    for(j=0;j<loop_cnt;j++)이 있는데요 loop가 무슨 역할을 하는 지
    모르겠습니다.;; 이 loop는 뭔가요?

    • pchero says:

      간만에 보는 코드라 한참을 쳐다봤네요. -_-;;

      간단히 섞고 싶은 크기라고 보시면 됩니다. loop_cnt 가 크면 클수록(But loop_cnt <= MAX) 랜덤하게 섞여질 확율이 높아지는 거죠.
      for (i = 0; i < MAX; i++) { n[i] = i; } cnt = MAX; for (j = 0; j < MAX; j++) { swap(n[rand() % cnt], n[--cnt]); printf("%d", n[cnt]); }

      라고 보시면 됩니다. 🙂

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.