본문 바로가기
Programming/BOJ

[C/C++] 백준 #2448 별 찍기 - 11(재귀 함수)

by 작은별하나 2023. 5. 6.
반응형

#2447 문제와 같이 이번 문제도 재귀 함수를 이용한 별찍기입니다.

 

문제는 프랙탈에서 자주 나오는 사이펀스키 삼각형(Sierpiński triangle)을 찍는 것입니다.

 

Sierpiński triangle

 

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

 

2448번: 별 찍기 - 11

첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)

www.acmicpc.net

 

#2447 문제와 마찬가지로 캔버스를 만들고 재귀 함수를 이용하여 풀었습니다.

//------------------------------------------------
//    baekjoon #2448 - Printing Stars - 11
//        - by Aubrey Choi
//        - created at 2019-08-04
//------------------------------------------------
#include <stdio.h>
#include <memory.h>

static char z[3*1048][6*1048+4];
void draw(int r, int c, int n)
{
    const char *t[3] = { "  *  ", " * * ", "*****" };
    if(n==3) { for(int i=0;i<3;i++, r++) memcpy(&z[r][c], t[i], 5); return; }
    n>>=1;
    draw(r, c+n, n); r+=n;
    draw(r, c, n); draw(r, c+2*n, n);
}
int main()
{
    int n, i, j;
    scanf("%d", &n);
    for(i=0;i<n;i++) for(j=0;j<2*n-1;j++) z[i][j]=' ';
    draw(0, 0, n);
    for(i=0;i<n;i++) puts(z[i]);
}
728x90

댓글