기초 수학

[기초수학] 조합 (Combination)

scone 2022. 4. 29. 12:25

[개념]

  • n개에서 r개를 택하는 경우의 수
    (순서가 중요하지 않다는 점에 유의.)
  • {1, 2, 3} 와 {2, 1, 3} 은 같은 경우이다.
  • 공식의 원리는 다음과 같다.
    n개 중에 r개를 순서를 생각해 뽑은 후, r개 중에 r개를 순서를 생각하여 뽑는 경우의 수를 나눠준다.
    그럼 순서를 고려해 뽑힌 r개에 대하여 각 순서가 달라질 경우의 수를 나눠주게 되어,
    결국 순서를 생각하지 않고 n개 중 r개를 뽑았을 때의 경우의 수가 된다.

$$ \mathbin{ _n C _r} = {n! \over r!(n-r)! } = {n(n-1)(n-2)\ ...\ (n-r+1) \over r!} $$

 

  • 예) \( \mathbin{_8 C _3 } = 8*7*6 / 3*2*1 = 56 \)
    8부터 3개 곱하고, 3 팩토리얼로 나누자. <- 이렇게 외우는게 간편

[실습1] 조합의 값을 구하는 프로그램을 만들어보자!

def combina_(numL,numR):
    result=1
    for i in range(numL,numL-numR,-1):
        result *= i
    for i in range(1,numR+1):
        result //= i
    return result

numL = int(input('몇 개 중에서 : '))
numR = int(input('몇 개 선택 : '))
print(combina_(numL,numR))
'''
몇 개 중에서 : 8
몇 개 선택 : 3
56
'''

 

늘 느끼지만 코딩은 머리로는 쉽다고 느껴져도 직접 손으로 해보지 않으면 버벅거리게 되는 것 같다.

가령 for i in range(numL,numL-numR,-1) : 을 바로 못 적는다던지...

혹시라도 미래에 복습을 하게 될 '나'한테 미리 조언하자면, 눈으로 보고 넘기지 말고 손으로 한번 구현해보자.