728x90
반응형

[ 백준 1993번 - 별찍기 18 ]

https://www.acmicpc.net/problem/10993

 

10993번: 별 찍기 - 18

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

www.acmicpc.net

#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;
}
반응형
Posted by 명문코딩컴퓨터
,