풀이
분할&정복을 하면 된다.
큰 삼각형에서 3개로 삼분할 되는 프랙탈이 생기게 된다.
재귀함수를 사용해 삼분할에서 배열에 할당해주면 된다.
코드
#include <cstdio>
#include <cstring>
int n;
char arr[3072][6143];
void f(int n, int x, int y)
{
if (n == 3)
{
arr[y][x] = arr[y + 1][x - 1] = arr[y + 1][x + 1] = '*';
for (int i = 0; i < 5; ++i)
arr[y + 2][x - 2 + i] = '*';
return;
}
int dv = n >> 1;
f(dv, x, y);
f(dv, x - dv, y + dv);
f(dv, x + dv, y + dv);
}
int main()
{
scanf("%d", &n);
memset(arr, ' ', sizeof(arr));
f(n, n - 1, 0);
for (int i = 0; i < n; ++i, puts(""))
{
for (int j = 0; j < 2 * n - 1; ++j)
{
printf("%c", arr[i][j]);
}
}
return 0;
}
'온라인저지' 카테고리의 다른 글
[BOJ] 2482번: 색상환 (0) | 2018.05.21 |
---|---|
[BOJ] 13302번: 리조트 (0) | 2018.05.20 |
[BOJ] 1463번: 1로 만들기 (0) | 2018.05.20 |
[BOJ] 2523번: 별찍기 - 13 (0) | 2018.05.15 |
[BOJ] 2447번: 별찍기 - 10 (0) | 2018.05.15 |
[BOJ] 1991번: 트리 순회 (0) | 2018.05.11 |
댓글