https://www.acmicpc.net/problem/2446
<c언어>
#include <stdio.h>
int main()
{
int num;
scanf("%d", &num);
int jflag = 1, jcnt = 1;
int bflag = -2, bcnt = 2*num-1;
for (int i = 1; i <= 2 * num - 1; i++)//줄
{
for (int j = 1; j < jcnt; j++) //공백
{
printf(" ");
if (i > (2 * num - 1) / 2)
jflag = -1;
}
jcnt += jflag;
for (int b = 1; b <= bcnt; b++)//별
{
printf("*");
if (i > (2 * num - 1) / 2)
{
bflag = 2;
}
}
bcnt += bflag;
printf("\n");
}
}
Hint
> i 는 줄을 나타낸것이다. 2*num-1까지 증가해야 한다.
> j는 공백, b는 별을 담당하는 변수이다.
각 줄당 출력되어야 하는 공백의 개수와 별의 개수를 잘 세어 규칙성을 발견해보자!
> 가장 중요한 힌트!
오른쪽 공백들은 출력을 할 필요가 없다. 별을 다 찍고 개행을 해버리면 되기 때문이다.
다시 말해, 모래시계 모양의 출력결과에서, 왼쪽 공백들은 출력이 되어야 하지만, 오른쪽 공백들은 출력에 대한 생각을 할 필요가 없다.
> 윗 그림에서, 왼쪽의 파란색 부분만 신경 쓰면 되고, 오른쪽 빨간색 부분은 어떻게 해야 출력을 할까? 라는 생각을
할 필요조차 없다는 말이다. 그냥 각 줄당 파란색 부분만 출력하고 개행 해버리면 자연스럽게 해결될 문제이다!
'Problem Solving > 백준' 카테고리의 다른 글
[백준] 2512번 : 예산 (0) | 2020.06.17 |
---|---|
[백준] 5575번 : 타임카드 (0) | 2020.04.05 |
[백준] 10996번 : 별 찍기 - 21 (0) | 2020.03.15 |
[백준] 2523번: 별 찍기 - 13 (0) | 2020.03.15 |
[백준] 1436번 : 영화감독 숌 (0) | 2020.02.29 |