공부 자료/알고리즘

(C/C++) 백준 10992번- 별 찍기

뚜루뚜루세니 2021. 7. 4. 19:16
728x90

문제출처:https://www.acmicpc.net/problem/10992

 

10992번: 별 찍기 - 17

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

www.acmicpc.net

 

1. 코드

#include <stdio.h>

int main() {
	int n;
	scanf("%d", &n);

	for (int i = 1; i <= n; i++) {

		//전체적으로 트리모양 *제외하고 공백줄때
		for (int j = 1; j <=n- i; j++) {
			printf(" ");
		}

		if (i == 1 || i == n) {
			//첫줄이랑 마지막줄일때 *찍기
			for (int j = 1; j <= 2 * i - 1; j++) {
				printf("*");
			}
		}
		else {
			//첫줄, 마지막줄 제외하고 공백을 만들어주면서 *찍기
			printf("*");
			for (int j = 0; j < 2 * i - 3; j++) {
				printf(" ");
			}
			printf("*");
		}
		printf("\n");
		
	}

}

2. 해결 과정

기본적으로 트리모양으로 *찍기 문제에서 첫번째 줄과 마지막줄을 제외하고 가운데 줄들의 *을 찍을 때 중간의 공백을 주는 문제이다.

전체적인 규칙이 있을 것 같은데 잘 모르겠어서,,, 첫줄과 마지막 줄은 기존 그대로 *을 찍어 주었고, else로 가운데 줄은 따로 공백을 만들어 주었다. 

만약에 처음에 입력받은 수를 3이라고 하면, 2번째 줄의 줄은 O*O*O으로 표현되어야한다. 따라서 공백은 2i-3일때 공백임을 알 수 있다.

 

3. 느낀점

가운데 줄의 공백을 만들어주는 것이 생각보다 어려웠고, 더 편한 규칙이 있을 것같은데 그것을 찾기 위해서 노력을 해야할 것같다.

728x90