Programming Challenges – LCD Display(LCD 디스플레이)

문제 <- 클릭

쉽고 재미 있는 문제다. 다른 문제와 다르게 한번에 성공. 책의 풀이보다 내가 한 방식이 왠지 마음에 든다.

#include 
#include 
using namespace std;

void printLine(int fontSize) {
    putchar(' ');
    for (int i = 0; i < fontSize; ++i)
        putchar('-');
    putchar(' ');
}

void printEmpty(int fontSize) {
    for (int i = 0; i < fontSize + 2; ++i)
        putchar(' ');
}

void printIO(int fontSize) {
    putchar('|');
    for (int i = 0; i < fontSize; ++i)
        putchar(' ');
    putchar(' ');
}

void printOI(int fontSize) {
    putchar(' ');
    for (int i = 0; i < fontSize; ++i)
        putchar(' ');
    putchar('|');
}

void printII(int fontSize) {
    putchar('|');
    for (int i = 0; i < fontSize; ++i)
        putchar(' ');
    putchar('|');
}

void printTop(char* arr, int arr_length, int fontSize) {
    for (int i = 0; i < arr_length; ++i) {
        switch (arr[i]) {
        case '1':
        case '4':
            printEmpty(fontSize);
            break;
        default:
            printLine(fontSize);
            break;
        }
        if (i < arr_length - 1)
            putchar(' ');
    }
    putchar('n');
}

void printTC(char* arr, int arr_length, int fontSize) {
    for (int j = 0; j < fontSize; ++j) {
        for (int i = 0; i < arr_length; ++i) {
            switch (arr[i]) {
            case '5':
            case '6':
                printIO(fontSize);
                break;
            case '1':
            case '2':
            case '3':
            case '7':
                printOI(fontSize);
                break;
            case '0':
            case '4':
            case '8':
            case '9':
                printII(fontSize);
                break;
            }
            if (i < arr_length - 1)
                putchar(' ');
        }
        putchar('n');
    }

}

void printCenter(char* arr, int arr_length, int fontSize) {
    for (int i = 0; i < arr_length; ++i) {
        switch (arr[i]) {
        case '0':
        case '1':
        case '7':
            printEmpty(fontSize);
            break;
        default:
            printLine(fontSize);
            break;
        }
        if (i < arr_length - 1)
            putchar(' ');
    }
    putchar('n');
}

void printCB(char* arr, int arr_length, int fontSize) {
    for (int j = 0; j < fontSize; ++j) {
        for (int i = 0; i < arr_length; ++i) {
            switch (arr[i]) {
            case '2':
                printIO(fontSize);
                break;
            case '1':
            case '3':
            case '4':
            case '5':
            case '7':
            case '9':
                printOI(fontSize);
                break;
            case '0':
            case '6':
            case '8':
                printII(fontSize);
                break;
            }
            if (i < arr_length - 1)
                putchar(' ');
        }
        putchar('n');
    }
}

void printBottom(char* arr, int arr_length, int fontSize) {
    for (int i = 0; i < arr_length; ++i) {
        switch (arr[i]) {
        case '1':
        case '4':
        case '7':
            printEmpty(fontSize);
            break;
        default:
            printLine(fontSize);
            break;
        }
        if (i < arr_length - 1)
            putchar(' ');
    }
    putchar('n');
}

int main() {
    int fontSize;
    int numbers;
    int numberOfNumbers;
    char numbersArr[9];
    while (cin >> fontSize >> numbers) {
        if (fontSize == 0 && numbers == 0)
            break;
        sprintf(numbersArr, "%d", numbers); //문자열로 바꾸기
        numberOfNumbers = strlen(numbersArr);
        printTop(numbersArr, numberOfNumbers, fontSize);    //윗줄 표시
        printTC(numbersArr, numberOfNumbers, fontSize);     //사이
        printCenter(numbersArr, numberOfNumbers, fontSize); //중간
        printCB(numbersArr, numberOfNumbers, fontSize); //사이
        printBottom(numbersArr, numberOfNumbers, fontSize); //아랫줄
        putchar('n');

    }
    return 0;
}

답글 남기기

이메일 주소는 공개되지 않습니다.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.