티스토리 뷰

 


[BOJ 2447(S1) 리뷰]

반복되는 패턴이 크기가 계속 커지는 경우이므로 재귀를 이용해 해결했다.

 


#include <iostream>
#include <queue>
#include <string>
#include <string.h>
using namespace std;
char table[2200][2200];
int n;

void printStar(int x, int y)
{

	for (int i = y; i < y + 3; i++) table[x][i] = '*';
	table[x + 1][y] = '*';
	table[x + 1][y+1] = ' ';
	table[x + 1][y + 2] = '*';
	for (int i = y; i < y + 3; i++) table[x+2][i] = '*';
}

void func(int n, int x, int y)
{
	if (n < 3) return;
	if (n % 3 != 0) return;
	if (n == 3)
	{
		printStar(x, y);
		return;
	}
	int s = n / 3;
	func(n / 3, x, y);
	func(n / 3, x + s, y);
	func(n / 3, x + s*2, y);
	func(n / 3, x , y + s);
	func(n / 3, x , y + s*2);
	func(n / 3, x + s, y + s*2);
	func(n / 3, x + s*2, y + s);
	func(n / 3, x + s*2, y + s*2);
}

void printresult(int n)
{
	if (n < 3) return;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
			cout << table[i][j];
		cout << '\n';
	}
}

int main(void)
{
	cin.tie(0);
	ios::sync_with_stdio(0);
	memset(table, ' ', sizeof(table));
	int n;
	cin >> n;
	func(n,0,0);
	printresult(n);


	
}



 

 

'알고리즘 풀이 > 재귀' 카테고리의 다른 글

프로그래머스 : 124 나라의 숫자  (0) 2021.01.26
BOJ : 1992 쿼드트리  (0) 2020.08.06
BOJ 1780 : 종이의 개수  (0) 2020.08.06
BOJ 1629 : 곱셈  (0) 2020.08.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함