아이디어랄까.
첫번째와 두번째는 너무 쉽다. 버퍼만 만들면 거기에 별표만 채우면 되니까. 오히려 makeBuffer 함수가 신경써야 할 부분. C 에서는 문자열의 끝을 신경써줘야 하니까.
세번째가 결국 문제인데, 무슨 수열 생각할 거 없이 그저 직관적으로 recursive로 필요한 버퍼의 양을 구현. 이건 별표 찍는 시작 위치 정할때도 쓸수 있더구만. 그저 손 가는대로 프로그래밍 했을 뿐.
다만 걱정되는게 있었다면, visual studio 띄우기도 귀찮아서.. 그리고 요즘에는 이런거 짜는데 마소 비주얼 스튜디오 형님까지 끌어들이는건 좀 미안하게 느껴져서 그냥 zp server 에서 vi 로 두들겼는데.. 나 gdb 쓸 줄 모르니까. malloc 쓰면서 약간 두려웠지. 흐흐흐. 다행이 const int 를 case 에서 받을 수 없는거 (이런 줄 오늘 알았다) 말고는 별달리 에러 없이 한방에 되주셔서 즐거웠지.
시험도 끝났으니 이런거나 하면서 놀면 재밌겠다. 다른 문제 없나...
아 요즘 왜이리 심심할까..
토이 토이/삼각형만들기
#include <stdio.h>
#include <stdlib.h>
#define FORWARD 1
#define BACKWARD 2
#define BIDIR 3
void getUserInput(int * sel, int * num) {
        scanf("%d %d", sel, num);
}
char * makeBuffer(int num) {
        char * ret = (char *)malloc(sizeof(char) * num + 1);
        ret[num--] = '\0';
        while (num >= 0)
                ret[num--] = ' ';
        return ret;
}
void forwardTriangle(int num, char * buffer) {
        int i;
        for (i = 0; i < num; i++) {
                buffer[i] = '*';
                printf("%s\n", buffer);
        }
}
void backwardTriangle(int num, char * buffer) {
        int i;
        for (i = num - 1; i >= 0; i--) {
                buffer[i] = '*';
                printf("%s\n", buffer);
        }
}
int calcBidirTriangleSize(int num) {
        if (num == 1)
                return 1;
        return calcBidirTriangleSize(num - 1) + 2;
}
void bidirTriangle(int num, char * buffer) {
        int i, center;
        center = calcBidirTriangleSize(num) / 2;
        for (i = 0; i < num; i++) {
                buffer[center + i] = '*';
                buffer[center - i] = '*';
                printf("%s\n", buffer);
        }
}
void produceTriangle(int sel, int num) {
        char * buffer;
        switch (sel) {
        case FORWARD:
                buffer = makeBuffer(num);
                forwardTriangle(num, buffer);
                break;
        case BACKWARD:
                buffer = makeBuffer(num);
                backwardTriangle(num, buffer);
                break;
        case BIDIR:
                buffer = makeBuffer( calcBidirTriangleSize(num) );
                bidirTriangle(num, buffer);
        }
        free(buffer);
}
int main(void) {
        int sel, num;
        getUserInput(&sel, &num);
        produceTriangle(sel, num);
        return 0;
}













