[BOJ_step_06]함수 - 별찍기 - 10

최대 1 분 소요

별찍기 - 10

예제
***

1. 문제 설명 및 풀이

입력 조건
첫째 줄에 항상 3의 제곱꼴인 N이 주어진다.(N = 3^k, 1 <= k < 8)

출력 조건
첫째 줄부터 N번째 줄까지 출력한다.

예전에 풀어봤던 별 찍기 11과 비슷했다. 어려웠다……. 문제를 보자마자 든 생각은 가장 작은 사각형을 범위를 나누어서 찍어야겠다라는 생각을 했는데 그 생각을 코드로 옮기기가 너무 어려웠다.
설명

#include<cstdio>
const int MAX = 6561;//3^8
int n;
char star[MAX][MAX];
void init() {
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			star[i][j] = ' ';
}
void stamp(int n,int x,int y) {
	if (n == 1) {
		star[y][x] = '*';
		return;
	}
	int div = n / 3;
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			if (i != 1 || j != 1) {
				stamp(div, x + div * i, y + div * j);
			}
		}
	}
	return;
}
int main() {
	scanf("%d", &n);
	init();
	stamp(n, 0, 0);
	
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			printf("%c", star[i][j]);
		}
		printf("\n");
	}
	return 0;
}

댓글남기기