파스칼 삼각형(Pascal's Triangle)은 정수를 삼각형 형태로 배열한 것으로, 그중에서도 이항계수(binomial coefficient)를 표현하는 대표적인 예로 널리 알려져 있습니다. 조합(combination)과 팩토리얼(factorial)을 활용하면 C언어로 손쉽게 구현할 수 있습니다.
파스칼 삼각형의 구성 원리
삼각형 외부에 있는 모든 값은 0으로 간주합니다. 첫 번째 행은 '0 1 0'이지만 실제 파스칼 삼각형에는 1만 표시되고, 양옆의 0은 보이지 않습니다. 두 번째 행은 첫 번째 행의 인접한 값들을 더해 (0+1)과 (1+0)을 계산하여 만들어지며, 결과는 다시 두 개의 0 사이에 위치하게 됩니다. 이 과정을 원하는 층(row) 수만큼 반복하면 파스칼 삼각형이 완성됩니다.
프로그래밍 관점에서 파스칼 삼각형은 이전 행의 인접한 두 요소를 더하여 새로운 행을 만들어가는 배열로 정의할 수 있습니다.

방법 1: 팩토리얼 함수를 이용한 구현
첫 번째 방법은 팩토리얼을 직접 계산하는 함수를 만들어 조합 공식 nCr = n! / (r! × (n-r)!)을 적용하는 방식입니다. 각 행의 값을 조합 공식으로 구한 뒤, 삼각형 모양이 되도록 앞쪽에 공백을 출력합니다.
#include <stdio.h>
int fact(int);
int main(){
int i,rows,j;
printf("enter no of rows :");
scanf("%d",&rows);
for (i = 0; i < rows; i++){
for (j = 0; j <= (rows- i - 2); j++)
printf(" ");
for (j = 0 ; j <= i; j++)
printf("%d ",fact(i)/(fact(j)*fact(i-j)));
printf("\n");
}
return 0;
}
int fact(int n){
int a;
int sum = 1;
for (a = 1; a <= n; a++)
sum = sum*a;
return sum;
}실행 결과
Enter no of rows :5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1방법 2: 배열 없이 이항계수를 순차적으로 계산하는 구현
두 번째 방법은 별도의 배열 없이, 한 행 내에서 이전 값을 재활용하여 다음 값을 구하는 방식입니다. 초기값 a=1에서 시작해 a = a × (row-i) / i 공식을 반복 적용하면 곱셈과 나눗셈만으로 각 자리의 이항계수를 효율적으로 계산할 수 있습니다.
#include<stdio.h>
int main(){
int num,row,i;
printf("Enter the number of rows: ");
scanf("%d",&num);
for(row=1; row<=num; row++){
int a=1;
for(i=1; i<=row; i++){
printf("%d ",a);
a = a * (row-i)/i;
}
printf("\n");
}
return 0;
}실행 결과
Enter the number of rows: 6 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
마무리
두 방식 모두 파스칼 삼각형을 출력한다는 동일한 목표를 가지지만, 방법 1은 조합 공식을 매번 계산하므로 코드가 직관적인 반면, 방법 2는 이전 결과를 활용해 연산량을 줄일 수 있어 더 효율적입니다. 초보자라면 먼저 팩토리얼 기반 방식으로 원리를 익힌 후, 최적화된 방식으로 발전시켜 보는 것을 추천합니다.