2023년 2월 24일에 작성됨
https://www.acmicpc.net/problem/2445
2445번: 별 찍기 - 8
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net
문제 분석
별, 공백, 별 순으로 해서 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");
}
}
코드 분석
1. n을 입력받고, cnt1에 n의 값을 넣어준다.
2. 예제 출력을 가로로 자른 윗 부분을 출력하기 위해 n번 반복하는 for문을 세워준다.
2-1. i 값에 따라 1개부터 n개까지 별을 출력하는 반복문을 세워준다.
2-2. 2*(cnt1-1)개부터 2개씩 줄어들며 공백을 출력하기 위해 cnt1을 -1씩 해준다.
2-3. 공백 기준 오른쪽과 왼쪽의 별의 개수가 같기 때문에 2-1과 똑같은 for문을 세워주고 줄자꿈을 해준다.
3. 아랫 부분을 출력하기 위해 n-1번 반복하는 for문을 세워준다.
3-1. n-1개부터 1씩 줄어들도록 하여 별을 출력한다.
3-2. cnt2는 2부터 +2씩 하여 공백을 출력한다.
3-3. 3-1과 같은 반복문을 세워주고 줄바꿈을 해주면 된다.
end
지금껏 풀었던 별찍기 중에 제일 어렵긴 했지만 그래도 차근차근 하니 풀 만했다!!
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[C]백준 4153 : 직각삼각형 (0) | 2024.01.15 |
---|---|
[C]백준_2446 : 별 찍기 - 9 (0) | 2023.12.23 |
[C]백준_1789 : 수들의 합 (2) | 2023.12.21 |
[C]백준_2444 : 별 찍기 - 7 (0) | 2023.12.20 |
[C]백준_1264 : 모음의 개수 (2) | 2023.12.20 |