https://www.acmicpc.net/problem/2445
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
별, 공백, 별 순으로 해서 for문을 이용하여 출력한다.
예제 출력을 대칭이 되도록 가로로 잘랐을 때
윗 부분 - 별 개수 +1씩, 공백 -1씩
아랫 부분 - 별 개수 -1씩, 공백 +1씩
되는 규칙이 있다.
#include <stdio.h>
int main()
{
int n, cnt1, cnt2;
scanf("%d", &n);
cnt1 = n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
printf("*");
}
for (int k = (cnt1 - 1) * 2; k > 0; k--)
{
printf(" ");
}
cnt1 -= 1;
for (int j = 0; j <= i; j++)
{
printf("*");
}
printf("\n");
}
cnt2 = 2;
for (int a = 0; a < n - 1; a++)
{
for (int b = 0; b < n - a - 1; b++)
{
printf("*");
}
for (int c = 0; c < cnt2; c++)
{
printf(" ");
}
cnt2 += 2;
for (int b = 0; b < n - a - 1; b++)
{
printf("*");
}
printf("\n");
}
}
n을 입력받고, cnt1에 n의 값을 넣어준다.
예제 출력을 가로로 자른 윗 부분을 출력하기 위해 n번 반복하는 for문을 세워준다.
2-1. i 값에 따라 1개부터 n개까지 별을 출력하는 반복문을 세워준다.
2-2. 2*(cnt1-1)개부터 2개씩 줄어들며 공백을 출력하기 위해 cnt1을 -1씩 해준다.
2-3. 공백 기준 오른쪽과 왼쪽의 별의 개수가 같기 때문에 2-1과 똑같은 for문을 세워주고 줄자꿈을 해준다.
아랫 부분을 출력하기 위해 n-1번 반복하는 for문을 세워준다.
3-1. n-1개부터 1씩 줄어들도록 하여 별을 출력한다.
3-2. cnt2는 2부터 +2씩 하여 공백을 출력한다.
3-3. 3-1과 같은 반복문을 세워주고 줄바꿈을 해주면 된다.
지금껏 풀었던 별찍기 중에 제일 어렵긴 했지만 그래도 차근차근 하니 풀 만했다!!