백준 2447 별찍기-10

c++문제풀이

문제

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

입력

첫째 줄에 N이 주어진다. N은 항상 3의 제곱꼴인 수이다. (3, 9, 27, …) (N=3^k, 1 ≤ k < 8)

출력

첫째 줄부터 N번째 줄까지 별을 출력한다.

예제 입력

27

예제 출력

***************************
* ** ** ** ** ** ** ** ** *
***************************
***   ******   ******   ***
* *   * ** *   * ** *   * *
***   ******   ******   ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
*********         *********
* ** ** *         * ** ** *
*********         *********
***   ***         ***   ***
* *   * *         * *   * *
***   ***         ***   ***
*********         *********
* ** ** *         * ** ** *
*********         *********
***************************
* ** ** ** ** ** ** ** ** *
***************************
***   ******   ******   ***
* *   * ** *   * ** *   * *
***   ******   ******   ***
***************************
* ** ** ** ** ** ** ** ** *
***************************

별찍기 문제 패턴

  1. printf(“*”); 문장만 사용해서 별을 출력한다.
  2. 중첩반복문을 이용하여 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);
	
}

RPC Message procedure

Remote Procedure Call - Stateful Continue reading

PubSub architecture

Published on August 10, 2023

RESTful architecture

Published on August 09, 2023