https://www.acmicpc.net/problem/2444
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
for문을 이용하여 예제 출력처럼 별을 출력한다.
#include <stdio.h>
int main()
{
int n, cnt = 1;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
for (int j = n - i - 1; j > 0; j--)
{
printf(" ");
}
for (int k = 0; k < 2 * cnt - 1; k++)
{
printf("*");
}
cnt++;
printf("\n");
}
cnt = n;
for (int a = 0; a < n - 1; a++)
{
for (int b = 0; b < a + 1; b++)
{
printf(" ");
}
for (int c = 2 * cnt - 3; c > 0; c--)
{
printf("*");
}
cnt--;
printf("\n");
}
}
n을 입력받고, 출력에서 마름모를 가로로 자른 윗부분인 큰 삼각형 모양을 먼저 출력하기 위해 i=0부터 n번 반복하는 반복문을 생성한다.
1-1. 공백은 n-1개, n-2개, ... 각 줄마다 1씩 줄어들게 출력하기 위해 n-i-1번을 반복해준다.
1-2. 별은 1개, 3개, ..., 2*n-1개까지 2씩 증가하도록 출력하기 위해 cnt=1부터 반복마다 1씩 증가하도록 해주고 줄바꿈을 해준다.
이제 밑부분인 작은 역삼각형 모양을 출력하기 위해 먼저 n-1번을 반복해주는 반복문을 생성해준다.
2-1. 공백을 1개, 2개, ..., n-1개씩 출력하기 위해 b=0부터 a+1번을 반복해준다.
2-2. 별을 2*n-3개, 2*(n-1)-3개, ..., 1개까지 2씩 줄어들게 출력하기 위해 c=2*cnt-3에서 반복마다 cnt를 -1씩 해주고 줄바꿈을 해준다.
삼각형과 역삼각형 출력하기를 섞은 문제였다. 아직까진 혼자 풀 만한데 다음 별 찍기는 어떤 모양일까..?!