별 찍기 공백 피라미드
문제
테두리의 행과 열 번호는 출력하지 않아도 된다.
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 = height - 1 - row;
int star_count = row + 1;
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");
}
}
앞의 피라미드 문제는 별 개수가 1, 3, 5, 7, 9처럼 홀수로 증가했다.
이번 공백 피라미드는 별 개수가 행마다 1개씩 증가하고, 별과 별 사이에 공백이 들어간다.
- 0행: 앞 공백 4개, 별 1개, 별 사이 공백 0개
- 1행: 앞 공백 3개, 별 2개, 별 사이 공백 1개
- 2행: 앞 공백 2개, 별 3개, 별 사이 공백 2개
- 3행: 앞 공백 1개, 별 4개, 별 사이 공백 3개
- 4행: 앞 공백 0개, 별 5개, 별 사이 공백 4개
앞 공백 수는 height - 1부터 시작해서 행이 1씩 증가할 때마다 1씩 감소한다.
따라서 height - 1 - row로 앞 공백 수를 구할 수 있다.
각 행마다 필요한 별의 수는 행 번호보다 1개 많다.
따라서 row + 1로 별의 수를 구할 수 있다.
별과 별 사이의 공백은 printf("* ")처럼 별과 공백을 한 번에 출력할 수도 있지만,
이 방식은 마지막 별 뒤에도 공백이 하나 더 붙는다.
따라서 정확한 출력을 위해 마지막 별이 아닐 때만 공백을 출력한다.