별을 이용하여 삼각형을 출력하는 예제는 이중 반복문을 이용한 대표적인 예제 중 하나이다. 같은 문제도 다양한 방법으로 해결할 수 있기 때문에 처음 프로그램 언어를 배우는 학생들이 어려워하는 예제이기도 하다. 그래서 다양한 별 삼각형 예제를 동일하게 해결하는 방법을 소개하려 한다.

 우선 별 삼각형를 하기전 간단한 예제를 살펴보자. 아래 예제는 5행 3열의 별을 출력하는 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(void) {
    int i,j;
    int row = 5, col = 5;
    for(i=1; i<=row; i++){
        for(j=1; j<=col; j++){
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
cs
 

 이 예제에서 기억해야할 내용은 7줄에서 별(*)을 col개 출력하기 위해 j를 1부터(j=1) col보다 작거나 같다(j<=col)로 표현했다는 사실이다. 즉, 우리가 별을 n개 출력하고 싶다면 for(j=1; j<=col; j++) 에 col 대신 n을 대입하면 된다. 우리는 이 방법을 이용하여 별 삼각형 예제를 풀 것이다. 앞으로 설명할 방법은 다음과 같은 장단점이 있다.

 장점 

  •  별의 개수 또는 공백의 개수를 안다면 쉽게  해결 할 수 있다.
  •  별 삼각형의 다양한 예제를 같은 방법으로 해결 할 수 있다.

 단점

  •  별의 개수를 수식화 하는데 어려움이 있다.

 별 예제 첫 번째 예제를 살펴보자. i는 행의 번호를 의미한다.

*		i=1, *의 개수=1
**		i=2, *의 개수=2
***		i=3, *의 개수=3
****		i=4, *의 개수=4
*****		i=5, *의 개수=5
		     *의 개수=i

 이 예제에서 행이 1부터 시작할 때 *의 개수는 행의 번호와 같다. 따라서 *의 개수는 i개로 표현할 수 있고 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(void) {
    int i, j;
    int row = 5;
    for (i = 1; i <= row; i++) {
        for (j = 1; j <= i; j++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
cs

 별 예제 첫 번째 예제를 살펴보자. 

    *	i=1, 공백의 개수=4, *의 개수=1
   **	i=2, 공백의 개수=3, *의 개수=2
  ***	i=3, 공백의 개수=2, *의 개수=3
 ****	i=4, 공백의 개수=1, *의 개수=4
*****	i=5, 공백의 개수=0, *의 개수=5
	     공백의 개수=5-i, *의 개수=i
	               =row-i

 공백의 개수와 행의 합이 row와 같다.(공백의 개수 + 행 = row) 따라서 공백의 개수는 row에서 행의 뺀 값이다.(공백의 개수 = row - 행) *의 개수는 첫번째 예제와 같은 i개이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(void) {
    int i, j;
    int row = 5;
    for (i = 1; i <= row; i++) {
        for (j = 1; j <= row - i; j++) {
            printf(" ");
        }
        for (j = 1; j <= i; j++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
 
cs

 

+ Recent posts