곱의 법칙 Multiplication Principle
곱의 법칙은 두 개 이상의 독립적인 선택이 있을 경우, 전체 선택의 경우의 수를 계산하는 방법이다.
만약 첫 번째 선택의 경우의 수가 n가지이고 두 번째 선택의 경우의 수가 m가지라면 전체 경우의 수는 n×m가지가 된다.
팩토리얼 Factorial
팩토리얼은 자연수 n에 대하여 n부터 1까지 모든 자연수의 곱을 의미한다.
n의 팩토리얼은 아래와 같이 계산이 된다.
n!=n×(n−1)×(n−2)×...×1
순열 Permutation
순열은 서로 다른 n개의 물건 중 r개를 선택하여 순서 있게 배열하는 방법의 수를 의미한다.
순열의 수는 P(n,r) 또는nPr표기가 가능하다. 그리고 계산 방법으로는 아래와 같이 계산이 가능하다
nPr=(n−r)!n!=n×(n−1)×(n−2)×...×(n−r+1)
조합 Combination
조합은 서로 다른 n개의 물건 중에서 순서를 고려하지 않고 r개를 선택하는 방법의 수를 의미한다.
조합은 C(n,r) 또는nCr표기가 가능하다.
nCr=r!(n−r)!n!
조합의 계산 식은 순열의 셰간 식을 비교해서 도출이 가능하다.
r개의 대상을 정렬하는 방법은 r!가지 이므로, 나열하는 순서로 구현을 했을 경우의 패턴 수는 구별하지 않는 경우의 r!배가 된다. 결과적으로 nPr=r!nCr이 성립한다.
예제
N개의 카드를 갖고 있다. 왼쪽에서 i번째 카드의 색은 Ai이다.
Ai=1일 때는 붉은색 Ai=2일 때 노란색, Ai=3일 때 푸른색이다.
여기서 같은 색의 카드 2장을 선택하는 방법의 가짓수는?
여기서 문제 해결 방법으로 전체 탐색하는 방법이 있다. 해당 방법은 N개 중 2장의 카드를 선택하는 알고리즘으로 O(N2)의 복잡고를 갖게 된다. 그렇기에 효율이 나쁘다.
붉은색, 노란색, 푸른색을 각각 x,y,z라고 할 때, 문제의 조건에 맞는 방법은
- 붉은색 카드 2장 선택 xC2
- 노란색 카드 2장 선택 yC2
- 푸른색 카드 2장 선택 zC2
이렇게 각각의 색상에서 두장을 뽑는 경우의 수는 이렇게 될 것이다. 그래서 문제에서는 같은 색상의 카드 2장을 뽑는 경우의 수를 반환을 한다면 위 3가지의 경우의 수를 더해서 반환하면 된다.
xC2+yC2+zC2=2x−(x−1)+2y−(y−1)+2z−(z−1)
이렇게 각 색상의 경우의 수를 더하면 복잡도는 O(N)으로 해당 문제는 해결이 된다.
N개의 카드를 갖고 있다. 왼쪽에서 i번째 카드에는 정수 Ai가 표시되어 있다. 카드 5장을 선택하는 방법 중에서 선택한 카드에 표시된 숫자의 합이 딱 1000이 되는 경우의 수는?
처음 본 예제처럼 이 문제 또한 전체 탐색으로 해결이 가능 하겠지만 이번 문제는 5장의 카드를 선택하기 때문에 복잡도 또한 O(N5)가 될 것이다.
하지만 이 문제는 N장의 카드에서 5장을 선택하는 방법은 N5가 아닌 NC5로 해야 한다.
100C5=5×4×3×2×1100×99×98×97×96=75287520
75287520정도의 경우의 수가 계산된다. 이는 109의 수 보다 훨씬 작다.