별 찍기 공백 역피라미드
문제
테두리의 행과 열 번호는 출력하지 않아도 된다.
0 1 2 3 4 5 6 7 8
0 * * * * *
1 * * * *
2 * * *
3 * *
4 *
해답
공백과 별 개수를 계산해서 출력
#include <stdio.h>
int main(void)
{
const int height = 5;
for (int row = 0; row < height; row++)
{
int space_count = row;
int star_count = height - row;
for (int col = 0; col < space_count; col++)
{
printf(" ");
}
for (int col = 0; col < star_count; col++)
{
printf("*");
if (col < star_count - 1)
{
printf(" ");
}
}
printf("\n");
}
}
앞의 별 찍기 역피라미드 문제는 별이 빈틈없이 붙어 있고, 별 개수가 9, 7, 5, 3, 1처럼 홀수로 줄어드는 형태였다.
이번 공백 역피라미드는 별 개수가 행마다 1개씩 감소하고, 별과 별 사이에 공백이 들어간다.
- 0행: 앞 공백 0개, 별 5개, 별 사이 공백 4개
- 1행: 앞 공백 1개, 별 4개, 별 사이 공백 3개
- 2행: 앞 공백 2개, 별 3개, 별 사이 공백 2개
- 3행: 앞 공백 3개, 별 2개, 별 사이 공백 1개
- 4행: 앞 공백 4개, 별 1개, 별 사이 공백 0개
앞 공백 수는 0부터 시작해서 행이 1씩 증가할 때마다 1씩 증가한다.
따라서 현재 행 번호인 row로 앞 공백 수를 구할 수 있다.
각 행마다 필요한 별의 수는 height에서 행 번호만큼 줄어든다.
따라서 height - row로 별의 수를 구할 수 있다.
별과 별 사이의 공백은 별을 출력한 뒤 공백을 바로 출력하는 방식으로 처리할 수 있다.
printf("* ")처럼 별과 공백을 한 번에 출력할 수도 있지만, 이 방식은 마지막 별 뒤에도 공백이 하나 더 붙는다.
따라서 정확한 출력을 위해 마지막 별이 아닐 때만 공백을 출력한다.