728x90
반응형
[ 백준 1993번 - 별찍기 18 ]
https://www.acmicpc.net/problem/10993
#include <stdio.h>
void star(int,int,int);
int power(int,int);
int res[1050][2050];
int main()
{
int n;
int i, j;
int row;
int col;
int term;
scanf("%d",&n);
row = power(2,n+1)-3;
col = power(2,n)-1;
for(i = 0;i < col;i++)
{
for(j = 0;j < row;j++)
{
res[i][j] = 0;
}
}
if(n % 2 == 0)
{
star(0,0,n);
}
else
{
star(col-1,0,n);
}
if(n % 2 == 1)
{
term = row/2 + 1;
for(i = 0;i < col;i++)
{
for(j = 0;j < term;j++)
{
if(res[i][j] == 1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
term++;
}
}
else
{
for(i = 0;i < col;i++)
{
for(j = 0;j < row;j++)
{
if(res[i][j] == 1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
row--;
}
}
return 0;
}
void star(int x,int y,int n)
{
int i,j;
if(n == 1)
{
res[x][y] = 1;
}
else if(n % 2 == 0)
{
for(i = y;i < y+power(2,n+1)-3;i++)
{
res[x][i] = 1;
}
for(i = 1;i < power(2,n) - 1;i++)
{
res[x+i][y+i] = 1;
res[x+i][y+power(2,n+1)-4-i] = 1;
}
star(x+(power(2,n)-1)/2,y+((power(2,n+1)-power(2,n))/2),n-1);
}
else if(n % 2 == 1 && n != 1)
{
for(i = y;i < y+power(2,n+1)-3;i++)
{
res[x][i] = 1;
}
for(i = 1;i < power(2,n)-1;i++)
{
res[x-i][y+i] = 1;
res[x-i][y+power(2,n+1)-4-i] = 1;
}
star(x-(power(2,n)-1)/2,y+((power(2,n+1)-power(2,n))/2),n-1);
}
}
int power(int b,int c)
{
int i;
int d = 1;
for(i = 0;i < c;i++)
{
d = d*b;
}
return d;
}
반응형
'백준 문제풀이' 카테고리의 다른 글
백준 2622번 - 삼각형만들기 (0) | 2021.12.10 |
---|---|
백준 13015번 - 별찍기 23 (0) | 2021.12.08 |
백준 2448번 - 별찍기11 (0) | 2021.12.01 |
백준 2447번 - 별찍기10 (0) | 2021.12.01 |
백준 14002 - 가장 긴 증가하는 부분 수열4 (0) | 2021.11.15 |