# 생각

// PrintStar2

패턴은 가운데에 공백이 있고, 가운데를 제외한 전체는 별이기 때문에

base condition은 별을 넣어준다

N이 3보다 클 경우, 공백으로 채워진 가운데(N/3) * (N/3)의 정사각형을

N/3 패턴으로 둘러싼 형태이므로

재귀식에 가운데일 경우 continue로 제외해주고 3x3크기의 반복문으로 작성해 준다

 

// PrintStar1

가운데 부분만 비어있고 나머지는 채워져 있음을 알 수 있다. (1,1), (1,4), (1,7) ~

즉 j % 3 == 1일 때 공백임을 알 수 있다

동일하게 i % 3 == 1일 때도 공백이므로

base condtion은 (i / n) % 3 == 1 && (j / n) % 3 == 1 일 때 공백을 출력하고 탈출한다

재귀식은 빈칸 검사 후 빈칸이 아닌 경우 n/3으로 반복해 검사해 준다

나머지 3x3 구조에서 빈칸 조건이 만족하지 않을 때만 *을 표시해 주려면

n / 3 == 0 조건이 필요하다

 

 

# 전체 코드

#include <bits/stdc++.h>
using namespace std;
// 제한 : 1초, 256MB
// N^k K = 1~7 : 2187

// NULL 대신 공백문자가 있을 경우 불필요한 공백이 추가로 출력될 수 있다.
// 전역 변수 사용시 초기 값이 NULL
char coord[2200][2200];	

void PrintStar2(int n, int x, int y)
{
	if (n == 1)
	{
		coord[x][y] = '*';
		return;
	}
	int divide = n / 3;
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			if (i == 1 && j == 1)
			{
				continue;
			}
			PrintStar2(divide, x + i * divide, y + j * divide);
		}
	}
}
void PrintStar1(int n, int i, int j)
{
	if ((i / n) % 3 == 1 && (j / n) % 3 == 1)
	{
		cout << ' ';
	}
	else
	{
		if (n / 3 == 0)
		{
			cout << '*';
		}
		else
		{
			PrintStar1(n / 3, i, j);
		}
	}
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int N;
	cin >> N;
	// PrintStar2
	for (int i = 0; i < N; i++)
	{
		fill(coord[i], coord[i] + N, ' ');
	}
	PrintStar2(N, 0, 0);
	for (int i = 0; i < N; i++)
	{
		cout << coord[i] << '\n';
	}
	// PrintStar1
	/*for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < N; j++)
		{
			PrintStar1(N, i, j);
		}
		cout << '\n';
	}*/
}

 


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

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 14956_Philosopher's walk with cpp  (0) 2022.01.31
[BOJ] 2448_별 찍기 - 11 with cpp  (0) 2022.01.30
[BOJ] 1992_쿼드트리 with cpp  (0) 2022.01.28
[BOJ] 1780_종이의 개수 with cpp  (0) 2022.01.28
[BOJ] 2630_색종이 만들기 with cpp  (0) 2022.01.28

+ Recent posts