백준 2447 별찍기-10
c++문제풀이
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N이 주어진다. N은 항상 3의 제곱꼴인 수이다. (3, 9, 27, …) (N=3^k, 1 ≤ k < 8)
출력
첫째 줄부터 N번째 줄까지 별을 출력한다.
예제 입력
27
예제 출력
*************************** * ** ** ** ** ** ** ** ** * *************************** *** ****** ****** *** * * * ** * * ** * * * *** ****** ****** *** *************************** * ** ** ** ** ** ** ** ** * *************************** ********* ********* * ** ** * * ** ** * ********* ********* *** *** *** *** * * * * * * * * *** *** *** *** ********* ********* * ** ** * * ** ** * ********* ********* *************************** * ** ** ** ** ** ** ** ** * *************************** *** ****** ****** *** * * * ** * * ** * * * *** ****** ****** *** *************************** * ** ** ** ** ** ** ** ** * ***************************
별찍기 문제 패턴
- printf(“*”); 문장만 사용해서 별을 출력한다.
- 중첩반복문을 이용하여 i행 j열에 별을 찍는다.
#include<stdio.h>
void star(int n, int x, int y);
char arr[6561][6561];
int main()
{
for(int i = 0; i < 6561; ++i)
{
for(int j = 0; j < 6561; ++j)
{
arr[i][j] = ' ';
}
}
int n;
scanf("%d", &n);
star(n, 0, 0);
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n; ++j)
{
printf("%c", arr[i][j]);
}
if(i == n-1)
break;
printf("\n");
}
return 0;
}
void star(int n, int x, int y)
{
if(n == 3)
{
arr[x][y] = '*';
arr[x][y+1] = '*';
arr[x][y+2] = '*';
arr[x+1][y] = '*';
arr[x+1][y+1] = ' ';
arr[x+1][y+2] = '*';
arr[x+2][y] = '*';
arr[x+2][y+1] = '*';
arr[x+2][y+2] = '*';
return;
}
n = n/3;
star(n, x , y);
star(n, x , y+ n);
star(n, x , y+ n + n);
star(n, x+n, y);
// star(n, x+n, y+n);
star(n, x+n, y+ n+n);
star(n, x+n+n, y);
star(n, x+n+n, y+ n);
star(n, x+n+n, y+ n+n);
}