본문 바로가기
Problem Solving/백준

[백준] 2446번 : 별 찍기 - 9

by shinbian11 2020. 3. 15.

https://www.acmicpc.net/problem/2446

 

2446번: 별 찍기 - 9

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

<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