๋ฌธ์
https://www.acmicpc.net/problem/2447
ํ์ด
์ด ๋ฌธ์ ์์ ๋์ค๋ ์์์ถ๋ ฅ์ ๋ณด๋ ๊ณ ๋ฑํ๊ต ๋ฏธ์ ๋ถ ๊ณผ์ ์ ๋ฌดํ๋ฑ๋น๊ธ์ ๋จ์์ ์ถํํ๋ ๋ฌธ์ ์ค ๋ฌดํ ๋ฑ๋น ๊ธ์๋ฅผ ํ์ฉํ ๋ํ์ ๋์ด๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๊ฐ ๋จผ์ ๋ ์ฌ๋๋ค.
(๋์ถฉ ์๋ฐ๊ฑฐโฆ) ์ถ์ฒ : https://m.blog.naver.com/jamogenius/220886627296
์ข๋ ์กฐ์ฌํด๋ณด๋ ์ด๋ฐ ๋ํ์ ํ๋ํ ๋ํ(fractal pattern) ์ด๋ผ๊ณ ํ๋ค๊ณ ํ๋ค.
๋ฐฐ๊ฒฝ ์ง์์ ์์ ๋๋ฉด ๋๊ฒ ๊ฐ๊ณ ์ด ๋ฌธ์ ๋ฅผ ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ์ ๋ฌธ์์ด ์ ์ ์์์ง๋ฉด์ ๊ฐฏ์๊ฐ ๋ง์์ง๋ฉฐ ๋ฐ๋ณต๋๋ฉฐ ํ๋ํ ๋ํ์ ํํ๋ฅผ ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
***
* *
***
๊ทธ๋์ ๋๋ ํ๋ํ ๋ํ์ด ๊ทธ๋ ค์ง๋ ๊ณผ์ ์ ๊ทธ๋๋ก ์์ค์ฝ๋์ ์ ์ฉํด๋ณด๊ธฐ๋ก ํ๋ค.
๋ฐ๋ก ํฐ ๋ํ์ ๋จผ์ ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ดํ ์์ ๋ํ์ ๊ทธ์์ ๋ฎ์ด ์์ฐ๊ณ ๊ทธ ๊ณผ์ ์ ๋ฐ๋ณตํ๋๋ก ํ๋ ๊ฒ์ด๋ค.
์๋ฅผ๋ค์ด ์ ๋ ฅ ๊ฐ์ด 27์ผ๋
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
********* *********
********* *********
********* *********
********* *********
********* *********
********* *********
********* *********
********* *********
********* *********
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
***************************
์ฒ์์๋ ์ด๋ฐ ๋ชจ์์ผ๋ก ๋ณ์ ์ฝ์ ํ๋ค์
*********
*********
*********
*** ***
*** ***
*** ***
*********
*********
*********
์ด ๋ํ์ ๊ณต๋ฐฑ์ด ๋ชจ์ฌ์๋ ๊ฐ์ด๋ฐ๋ฅผ ์ ์ธํ๊ณ ๋ถ์ฌ
***************************
***************************
***************************
*** ****** ****** ***
*** ****** ****** ***
*** ****** ****** ***
***************************
***************************
***************************
********* *********
********* *********
********* *********
*** *** *** ***
*** *** *** ***
*** *** *** ***
********* *********
********* *********
********* *********
***************************
***************************
***************************
*** ****** ****** ***
*** ****** ****** ***
*** ****** ****** ***
***************************
***************************
***************************
์ด๋ฐ ๋ฌธ์์ ๋ง๋ค์ด๋ด๊ณ ๋ ๋ ์์ ๋ฌธ์์ ๋ง๋ค๊ณ ์์ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋๋ก ํ๋ค.
์์ค
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
int n,cursor[2]={0,0}; // '*' = side_length , ' ' = side_length / 3, cursor = {x,y}
bool arr [6561][6561],src [6561][6561];
void set(int side_length)
{
///////// arr ๋ฐฐ์ด ์ด๊ธฐํ /////////
if(side_length == n)
for(int i=0; i<n; i++)
memset(arr[i],true,sizeof(bool)*n);
///////// src ๋ฐฐ์ด ์ค์ //////////
for(int i=0; i<side_length; i++) //๋ณ ์ฐ๊ธฐ
memset(src+i,true,side_length);
int center = side_length/3;
for(int i=center; i<center+(side_length/3); i++) //๋น์นธ ์ถ๊ฐ
memset(src[i]+(side_length/3),false,center);
/////////src ์์ ๋ง๋ ํจํด arr๋ก ๊ท์น์ ๋ง์ถฐ ๋ณต์ฌ///////////
for(cursor[1] = 0; cursor[1]<n; cursor[1]+=side_length)
for(cursor[0] = 0; cursor[0]<n; cursor[0] += side_length)
for(int i=0; i<side_length; i++)
if(*(arr[cursor[1]+i]+cursor[0]) != false)
memcpy(arr[cursor[1]+i]+cursor[0],src[i],sizeof(bool)*side_length);
if(side_length > 3)
set(side_length/3);
}
int main()
{
scanf("%d",&n);
set(n);
for(int i=0; i<n; i++) // ํ
์คํธ ์ถ๋ ฅ
{
for(int j=0; j<n; j++)
printf("%c",arr[i][j] ? '*':' ');
printf("\n");
}
return 0;
}
๋ด ์์ค ๊ธฐ์ค์ผ๋ก src๋ฐฐ์ด์ ์ ์ ์์์ง๋ ๋ฌธ์์ ๋ง๋ค๊ณ ๊ทธ ๋ฌธ์๋ค์ arr๋ฐฐ์ด์ ๋ถ์ฌ ๋ฌธ์์ ๋ง๋ค๋๋ก ํ์๋ค.