순열(Permutation)인 nPr는 P(n, r)로도 표기하며, 주어진 원소들을 순서를 고려해 나열하는 경우의 수를 구하는 수학 공식입니다. P(n, r)의 공식은 다음과 같습니다.
P(n, r) = n! / (n − r)!
n개의 원소로 이루어진 집합에서 만들 수 있는 전체 순열의 개수는 n!이며, 여기서 "!"는 팩토리얼(factorial)을 의미합니다.
입력 및 출력 예시
입력: n = 5, r = 4 출력: 120
계산 과정 설명
P(5, 4) = 5! / (5 − 4)! = 120 / 1 = 120 5! = 1 × 2 × 3 × 4 × 5 = 120
C 프로그램 예제 코드
먼저 팩토리얼을 계산하는 함수 fact()를 정의한 뒤, n!을 (n − r)!로 나누어 nPr 값을 구합니다.
#include <stdio.h>
long int fact(int x) {
int i;
long int f = 1;
for (i = 2; i <= x; i++) {
f = f * i;
}
return f;
}
int main() {
int n = 5, r = 4;
long int npr;
npr = fact(n) / fact(n - r);
printf("%ld\n", npr);
return 0;
}
코드 동작 원리
- fact(n) 함수가 5! = 120을 계산합니다.
- fact(n − r) 함수가 1! = 1을 계산합니다.
- 두 값을 나누어 120 ÷ 1 = 120이라는 최종 결과를 화면에 출력합니다.
알아두면 좋은 점
- 순열은 순서가 중요한 경우의 수를 셀 때 사용하며, 조합(nCr)과 달리 나열 순서를 구분합니다.
- r = n일 경우 P(n, n) = n!이 되어 전체 순열의 개수와 같아집니다.
- n이 커지면 팩토리얼 값이 급격히 증가하므로, 오버플로우를 방지하려면 long int처럼 표현 범위가 넓은 자료형을 사용하는 것이 좋습니다.