본문 바로가기
파이썬

파이썬으로 총합이 k가 되는 n개의 무작위 숫자 구하기

by 수퍼스타 2021. 2. 28.

에전에 형이 거상을 하면서였나... 디아블로를 하면서였나... 총합이 k가 되는 n개의 무작위 숫자를 구해달라고 한 적이 있었다.

 

당시에는 엑셀로 무작위 함수를 이용해서 만들어줬는데, 앞의 n-1개의 숫자가 정해지면 마지막 n번째 숫자는 자유도가 없기 때문에 다른 n-1개의 수와 비교해 평균적으로 굉장히 다른 숫자가 나오는 문제가 있었다.

 

파이썬을 공부하면서 위의 문제를 해결할 수 있는 방법을 찾아보려고 코드를 만들어 보았다.

 

해보고 여러 차례 테스트를 해본 결과, 모든 숫자의 평균이 k/n에 가까운 숫자(정확히 말하자면 k-n+1 / n 일 것이다.)로 수렴하는 것으로 나타났다. 이는 모든 숫자들이 무작위로 선택된다는 요구사항을 만족하는 것이다. 단, n이 8을 넘어가면 속도가 매우 느려지고, 10이 넘어가면 잠깐 기다리는 정도로는 끝이 나지 않는다는 치명적인 문제가 존재한다.

 

만들면서 여러 방법을 써보았지만 현재 이 정도가 내가 할 수 있는 최선의 코드이다.

앞으로 여러 아이디어가 있을 때마다 이를 구현하면서 파이썬을 연습해보려고 한다.

 

import random

def get_number(n, k):

    running = True
    lst = []

    while running:

        for i in range(1, n+1):
            lst.append(random.randint(1, k+1))
            
        if sum(lst) == k:
            running = False
        else:
            lst = []
            pass
        
    print("Numbers :", lst)

print()
print("Please type two numbers.")
print("n : Counts of numbers you want to find")
print("k : Sum of numbers")
print()

n_max = 5
n_running = True

while n_running:
    n = int(input("n : "))
    if n > n_max:
        print()
        print("The 'n' is too large.")
        print("Please enter a number less than {}.".format(n_max))
        print()
    else:
        n_running = False
k = int(input("k : "))

print()
get_number(n, k)

 

 

댓글