역 피라미드(Inverted Pyramid)
추천 자료: ASP.NET Core 인증 및 권한 부여
프로그래밍에서 연습하기 또 다른 좋은 예제로 피라미드 모양을 거꾸로 뒤집는 역 피라미드(Inverted Pyramid)가 있습니다.
역 피라미드 모양은 다음 경로의 피라미드 만들기 내용을 알고 있다고 가정하고 설명을 이어 나가겠습니다.
역 피라미드 또는 역 정삼각형 모양은 다음과 같습니다.
3
*****
***
*
4
*******
*****
***
*
5
*********
*******
*****
***
*
역 피라미드를 만드는 소스는 다음과 같습니다.
참고로, 제 강의 소스 대부분의 for 반복문은 인덱스 변수가 0부터 시작됩니다. 피라미드 문제의 경우에는 1부터 시작하면 더 편할 수 있지만, for 반복문 고유의 모양은 유지하고자 0부터 n보다 작을 동안 반복하는 모양을 사용하겠습니다.
코드: inverted_pyramid.c
#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
int main(void)
{
int count = 0; // 높이 개수
int block = 0; // 별표 개수
int height = 0; // 높이 번호
scanf("%d", &count);
for (int i = 0; i < count; i++) // i 반복: 입력된 높이 개수만큼 반복
{
height = i + 1; // 높이 번호 계산(반복문에서 변수 i를 1부터 시작하면 필요없음)
block = (count * 2) - (height * 2 - 1); // 출력할 별표 개수 계산
// 공백 출력: (j < i) 조건에 따라서 공백 개수가 0, 1, 2로 증가
for (int j = 0; j < i; j++) // j 반복
{
printf(" ");
}
// 별표 출력: 별표 개수는 (count * 2) - (height * 2 - 1) => (..., 5, 3, 1)
for (int j = 0; j < block; j++) // k 반복: 별표 개수만큼 반복
{
printf("*");
}
printf("\n"); // 높이 줄바꿈
}
return 0;
}
10
*******************
*****************
***************
*************
***********
*********
*******
*****
***
*
만약, 소스 코드를 좀 더 간결하게 작성하면 다음과 같이 작성할 수도 있습니다.(TODO:)
코드: inverted_pyramid_short.c
#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
int main(void)
{
int count = 0; // 높이 개수
int block = 0; // 별표 개수
int height = 0; // 높이 번호
scanf("%d", &count);
for (int i = 0; i < count; i++) // i 반복: 입력된 높이 개수만큼 반복
{
height = i + 1; // 높이 번호 계산(반복문에서 변수 i를 1부터 시작하면 필요없음)
block = (count * 2) - (height * 2 - 1); // 출력할 별표 개수 계산
// 공백 출력: (j < i) 조건에 따라서 공백 개수가 0, 1, 2로 증가
for (int j = 0; j < i; j++) // j 반복
{
printf(" ");
}
// 별표 출력: 별표 개수는 (count * 2) - (height * 2 - 1) => (..., 5, 3, 1)
for (int j = 0; j < block; j++) // k 반복: 별표 개수만큼 반복
{
printf("*");
}
printf("\n");
}
return 0;
}
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!