프로그램 1.4.1 교환하는 대신 샘플 추출하기 (sample.py)
import random import sys import stdarray import stdio m = int(sys.argv[1]) # m개의 요소를 선택한다. n = int(sys.argv[2]) # 0, 1, ..., n-1 중에서 # 배열 perm을 [0, 1, ..., n-1]으로 초기화한다. perm = stdarray.create1D(n, 0) for i in range(n): perm[i] = i # perm[0..m)에 m개의 무작위 샘플을 생성한다. for i in range(m): r = random.randrange(i, n) # perm[i]와 perm[r]을 교환한다. temp = perm[r] perm[r] = perm[i] perm[i] = temp # 결과를 출력한다. for i in range(m): stdio.write(str(perm[i]) + ' ') stdio.writeln()
m n perm[] |
샘플 크기 범위 0부터 n-1 사이의 조합 |
이 프로그램은 명령 줄 인수로 m
과 n
을 입력받아 0
과 n-1
사이에서 중복되지 않은 숫자 m
개를 무작위로 샘플링해 출력한다. 이 과정은 로또뿐만 아니라 과학 분야에서 다양하게 응용된다. 첫 번째 인수가 두 번째 인수보다 작거나 같으면 0
에서 n-1
사이 정수의 무작위 순열이 된다. 첫 번째 인수가 두 번째 인수보다 크면 프로그램 실행 시 ValueError
를 출력한다.
% python3 sample.py 6 16 9 5 13 1 11 8 % python3 sample.py 10 1000 656 488 298 534 811 97 813 156 424 109 % python3 sample.py 20 20 6 12 9 8 13 19 0 2 4 5 18 1 14 16 17 3 7 11 10 15