본문 바로가기
Computer Science/알고리즘 문제 (실패)

C - [시간초과 백준 2446] 별 찍기 11

by rnasterofmysea 2024. 12. 28.
반응형

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

 

/*
BOJ_2448_별찍기
https://www.acmicpc.net/problem/2448
*/

#include <stdio.h>
#define MAX 3 * (1 << 10) // 최대 크기 설정

char arry[MAX][MAX]; // 출력 배열

// 삼각형을 생성하는 재귀 함수
void triangle(int top, int y_start, int len) {
    if (len == 3) { // 기저 조건: 삼각형의 최소 크기
        // 작은 삼각형 모양 그리기
        arry[y_start][top] = '*';
        arry[y_start + 1][top - 1] = '*';
        arry[y_start + 1][top + 1] = '*';
        arry[y_start + 2][top - 2] = '*';
        arry[y_start + 2][top - 1] = '*';
        arry[y_start + 2][top] = '*';
        arry[y_start + 2][top + 1] = '*';
        arry[y_start + 2][top + 2] = '*';
        return;
    }

    // 상부 삼각형 (하나)
    triangle(top, y_start, len / 2);

    // 하부 삼각형 (두 개)
    triangle(top - len / 2, y_start + len / 2, len / 2); // 좌측 하단
    triangle(top + len / 2, y_start + len / 2, len / 2); // 우측 하단
}

int main() {
    int N;
    scanf("%d", &N);

    // 배열 초기화
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < 2 * N - 1; j++) {
            arry[i][j] = ' ';
        }
    }

    // 삼각형 그리기
    triangle(N - 1, 0, N);

    // 출력
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < 2 * N - 1; j++) {
            printf("%c", arry[i][j]);
        }
        printf("\n");
    }

    return 0;
}
반응형