더북(TheBook)

프로그램 1.4.2 카드 수집가 시뮬레이션 (couponcollector.py)

import random
import sys
import stdarray
import stdio
 
n = int(sys.argv[1])
 
count = 0
collectedCount = 0
isCollected = stdarray.create1D(n, False)
 
while collectedCount < n:
    # 카드를 하나 생성한다.
    value = random.randrange(0, n)
    count += 1
    if not isCollected[value]:
        collectedCount += 1
        isCollected[value] = True
 
stdio.writeln(count)
n
count
collectedCount
isCollected[i]
value
카드의 값 (0에서 n-1)
수집한 카드 수
수집한 카드의 가지 수
카드 i를 수집했는지 여부
현재 카드의 값

이 프로그램은 명령 줄 인수로 n을 입력받고 n가지 카드를 모두 갖게 될 때까지 수집한 카드의 수를 출력한다. 결국 쿠폰 수집가 문제를 시뮬레이션한다.

% python3 couponcollector.py 1000
6583
% python3 couponcollector.py 1000
6477
% python3 couponcollector.py 1000000
12782673
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.