이 글에서는 자바(Java)를 사용해 파스칼의 삼각형(Pascal's Triangle)을 출력하는 방법을 알아봅니다. 파스칼의 삼각형은 여러 개의 for 반복문과 print 문을 조합하여 만들 수 있으며, 삼각형 바깥쪽의 모든 값은 0으로 간주됩니다.
첫 번째 행은 개념적으로 0 1 0이지만, 실제 삼각형에서는 1만 공간을 차지하고 0은 화면에 나타나지 않습니다. 두 번째 행은 인접한 값들을 더한 (0+1)과 (1+0)으로 구성되며, 그 결과는 양쪽의 0 사이에 위치하게 됩니다. 이 과정을 원하는 층(row) 수에 도달할 때까지 반복하면 완전한 파스칼의 삼각형이 만들어집니다.
실행 결과 미리보기
입력 예시
Enter the number of rows in Pascal's Triangle : 8
출력 결과
Enter the number of rows in Pascal's Triangle : 8
The Pascal's Triangle :
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1알고리즘
파스칼의 삼각형을 출력하는 전체 흐름은 다음과 같습니다.
Step 1 - 시작(START) Step 2 - 정수형 변수 i, j, my_input 세 개를 선언한다. Step 3 - 사용자로부터 필요한 값을 입력받거나 값을 직접 정의한다. Step 4 - 두 수의 팩토리얼을 계산하는 'factorial()' 함수와, 두 수의 조합(combination)을 계산하는 'combination()' 함수를 정의한다. Step 5 - 숫자 사이의 공백을 만들기 위해 중첩된 'for' 반복문을 수행한다. Step 6 - 가장 안쪽 반복문이 끝난 후, 다른 'for' 반복문을 통해 'i'와 'j'의 조합 값을 구한다. Step 7 - 줄바꿈을 출력하여 다음 줄에도 'i'와 'j'의 조합 값이 올바르게 배치되도록 한다. Step 8 - 결과를 화면에 출력한다. Step 9 - 종료(STOP)
예제 1: 사용자 입력으로 출력하기
이 예제에서는 사용자가 프롬프트에 직접 행(row)의 개수를 입력하면, 해당 크기의 파스칼의 삼각형이 콘솔에 출력됩니다.
import java.util.Scanner;
public class PascalsTriangle {
static int factorial(int my_input) {
int factors;
for(factors = 1; my_input > 1; my_input--){
factors *= my_input;
}
return factors;
}
static int combination(int my_input,int r) {
return factorial(my_input) / ( factorial(my_input-r) * factorial(r) );
}
public static void main(String args[]){
System.out.println();
int my_input, i, j;
my_input = 5;
System.out.println("Required packages have been imported");
Scanner my_scanner = new Scanner(System.in);
System.out.println("A reader object has been defined ");
System.out.print("Enter the number of rows in Pascal's Triangle : ");
my_input = my_scanner.nextInt();
System.out.println("The Pascal's Triangle : ");
for(i = 0; i <= my_input; i++) {
for(j = 0; j <= my_input-i; j++){
System.out.print(" ");
}
for(j = 0; j <= i; j++){
System.out.print(" "+combination(i, j));
}
System.out.println();
}
}
}출력 결과
Required packages have been imported
A reader object has been defined
Enter the number of rows in Pascal's Triangle : 8
The Pascal's Triangle :
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1예제 2: 미리 정의된 값으로 출력하기
이번 예제에서는 행의 개수가 코드 내부에서 미리 정의되어 있으며, 그 값을 읽어와 콘솔에 바로 출력합니다. 사용자 입력 없이 결과를 확인해야 할 때 유용한 방식입니다.
public class PascalsTriangle {
static int factorial(int my_input) {
int factors;
for(factors = 1; my_input > 1; my_input--){
factors *= my_input;
}
return factors;
}
static int combination(int my_input,int r) {
return factorial(my_input) / ( factorial(my_input-r) * factorial(r) );
}
public static void main(String args[]){
System.out.println();
int my_input, i, j;
my_input = 8;
System.out.println("The number of rows in Pascal's Triangle is defined as " +my_input);
System.out.println("The Pascal's Triangle : ");
for(i = 0; i <= my_input; i++) {
for(j = 0; j <= my_input-i; j++){
System.out.print(" ");
}
for(j = 0; j <= i; j++){
System.out.print(" "+combination(i, j));
}
System.out.println();
}
}
}출력 결과
The number of rows in Pascal's Triangle is defined as 8
The Pascal's Triangle :
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1핵심 포인트 정리
이 프로그램의 핵심은 조합 공식 nCr = n! / ((n-r)! × r!)을 활용한다는 점입니다. 각 행의 k번째 값은 C(n, k), 즉 'n개 중 k개를 선택하는 경우의 수'와 같기 때문에, 팩토리얼 함수와 조합 함수만 잘 정의하면 반복문을 통해 삼각형의 모든 값을 손쉽게 계산할 수 있습니다. 또한 각 행 앞에 공백을 점점 줄여가며 출력하면 좌우 대칭인 피라미드 형태의 삼각형을 완성할 수 있습니다.