본문 바로가기
온라인저지

[BOJ] 2448번: 별찍기 - 11

by plzfday 2018. 5. 15.

2448번: 별찍기 - 11

풀이

분할&정복을 하면 된다.
큰 삼각형에서 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

댓글