[BOJ_step_06]함수 - 별찍기 - 10
별찍기 - 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;
}
댓글남기기