궤도

[EPPER] 11회 2번 본문

💻 현생/⛓ 알고리즘

[EPPER] 11회 2번

영이오 2020. 10. 9. 00:15

문제

 


풀이

 

난 별찍는 문제가 싫다. 별별 기상천외한 방법으로 별을 찍고, 대부분 노가다성이 짙은 문제라 풀고나서의 성취감도 그닥없다. 그래도 이걸 풀어야 졸업을 시켜줄테니 풀어야 한다.

다이아몬드 모양에 집중하지 말고 마지막 별까지의 공간(?)을 세보자 위 예시에선 3-4-5-4-3이다 공백은 2-1-0-1-2 이다. 가운데를 기준으로 잘라서 출력해야할 것 같다는 기분이 들 것이다. 가장 윗줄의 공백 갯수는 n/2개 이다. 여기부터 한 개씩 줄어들 것이고 별은 1부터 시작해서 두 개씩 늘어날 것이다. 이를 고려해서 윗 부분을 출력했다면 이제 반대로 공백을 한 개씩 늘리고, 별은 두 개씩 늘리며 아랫 부분을 출력한다. 별찍기는 재미 없어서 풀이도 대충 쓰게 된다.


소스코드

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
	int n;

	scanf("%d", &n);
	int empty = n / 2;
	int star = 1;
	for (int i = 0; i <= (n / 2); i++) { //위의 절반 + 가운데
		for (int j = 0; j < empty; j++)
			printf(" ");
		for (int j = 0; j < star; j++)
			printf("*");
		printf("\n");
		empty -= 1;
		star += 2;
	}
	empty += 2;
	star -= 4;
	for (int i = 0; i < (n / 2); i++) { //아래 절반
		for (int j = 0; j < empty; j++)
			printf(" ");
		for (int j = 0; j < star; j++)
			printf("*");
		printf("\n");
		empty += 1;
		star -= 2;
	}
}
Comments