U E D R , A S I H C RSS

토�/삼�형만들기/김남훈

아�디어랄까.

첫번째와 �번째는 너무 쉽다. 버�만 만들면 거기� 별표만 채우면 �니까. 오히려 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;
}

아 요즘 왜�리 심심할까..

토� 토�/삼�형만들기
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:21
Processing time 0.0046 sec