LCD Display

LCD Display

한 친구가 방금 새 컴퓨터를 샀다. 그 친구가 지금까지 샀던 가장 강력한 컴퓨터는 공학용 전자 계산기였다. 그런데 그 친구는 새 컴퓨터의 모니터보다 공학용 계산기에 있는 LCD 디스플레이가 더 좋다며 크게 실망하고 말았다. 그 친구를 만족시킬 수 있도록 숫자를 LCD 디스플레이 방식으로 출력하는 프로그램을 만들어보자.

입력

입력 파일은 여러 줄로 구성되며 표시될 각각의 숫자마다 한 줄씩 입력된다. 각 줄에는 s와 n이라는 두개의 정수가 들어있으며 n은 출력될 숫자( 0<= n <= 99,999,999 ), s는 숫자를 표시하는 크기( 1<= s < 10 )를 의미한다. 0 이 두 개 입력된 줄이 있으면 입력이 종료되며 그 줄은 처리되지 않는다.

출력

입력 파일에서 지정한 숫자를 수평 방향은 '-' 기호를, 수직 방향은 '|'를 이용해서 LCD 디스플레이 형태로 출력한다. 각 숫자는 정확하게 s+2개의 열, 2s+3개의 행으로 구성된다. 마지막 숫자를 포함한 모든 숫자를 이루는 공백을 스페이스로 채워야 한다. 두 개의 숫자 사이에는 정확하게 한 열의 공백이 있어야 한다.

각 숫자 다음에는 빈 줄을 한 줄 출력한다. 밑에 있는 출력 예에 각 숫자를 출력하는 방식이 나와있다.

입력 예

2 12345
3 67890
0 0

출력 예

      --   --        --
   |    |    | |  | |
   |    |    | |  | |
      --   --   --   --
   | |       |    |    |
   | |       |    |    |
      --   --        --

 ---   ---   ---   ---   ---
|         | |   | |   | |   |
|         | |   | |   | |   |
|         | |   | |   | |   |
 ---         ---   ---
|   |     | |   |     | |   |
|   |     | |   |     | |   |
|   |     | |   |     | |   |
 ---         ---   ---   ---
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

90개의 풀이가 있습니다. 8 / 9 Page

특이하게 허접한 코드 대량생산하는 사람입니다

#include <stdio.h>

void printUpper(char(*myArray)[100], int s, int accumul)
{
    int i = 0;
    for (i = 1; i <= s ; i++)
    {
        myArray[0][i + accumul] = '-';
    }
}

void printMid(char (*myArray)[100], int s, int accumul)
{
    int i = 0;
    for (i = 1; i <= s; i++)
    {
        myArray[s+1][i + accumul] = '-';
    }
}

void printBottom(char(*myArray)[100], int s, int accumul)
{
    int i = 0;
    for (i = 1; i <= s; i++)
    {
        myArray[2 * s + 2][i + accumul] = '-';
    }
}

void printLeftUpper(char(*myArray)[100], int s, int accumul)
{
    int i = 0;
    for (i = 1; i <= s; i++)
    {
        myArray[i][accumul] = '|';
    }
}

void printLeftBottom(char(*myArray)[100], int s, int accumul)
{
    int i = 0;
    for (i = 1; i <= s; i++)
    {
        myArray[i + s + 1][accumul] = '|';
    }
}

void printRightUpper(char(*myArray)[100], int s, int accumul)
{
    int i = 0;
    for (i = 1; i <= s; i++)
    {
        myArray[i][accumul + s + 1] = '|';
    }
}

void printRightBottom(char(*myArray)[100], int s, int accumul)
{
    int i = 0;
    for (i = 1; i <= s; i++)
    {
        myArray[i + s + 1][accumul + s + 1] = '|';
    }
}


int main(void)
{
    char myArray[100][100] = { ' ' };
    int length = 0;
    int i = 0;
    int s = 0;
    int accumul = 0;
    char string[1024] = { '\0' };
    scanf_s("%d %s", &s, string, sizeof(string));

    for ( i = 0; string[i] != '\0' ; i++)
    {
        switch (string[i])
        {
        case '0':
            printBottom(myArray, s, accumul);
            printUpper(myArray, s, accumul);

            printRightUpper(myArray, s, accumul);
            printRightBottom(myArray, s, accumul);
            printLeftBottom(myArray, s, accumul);
            printLeftUpper(myArray, s, accumul);
            break;
        case '1':
            printRightUpper(myArray, s, accumul);
            printRightBottom(myArray, s, accumul);
            break;
        case '2':
            printBottom(myArray, s, accumul);
            printUpper(myArray, s, accumul);
            printMid(myArray, s, accumul);
            printRightUpper(myArray, s, accumul);
            printLeftBottom(myArray, s, accumul);
            break;
        case '3':
            printBottom(myArray, s, accumul);
            printUpper(myArray, s, accumul);
            printMid(myArray, s, accumul);
            printRightUpper(myArray, s, accumul);
            printRightBottom(myArray, s, accumul);
            break;
        case '4':
            printLeftUpper(myArray, s, accumul);
            printMid(myArray, s, accumul);
            printRightUpper(myArray, s, accumul);
            printRightBottom(myArray, s, accumul);
            break;
        case '5':
            printBottom(myArray, s, accumul);
            printUpper(myArray, s, accumul);
            printMid(myArray, s, accumul);
            printLeftUpper(myArray, s, accumul);
            printRightBottom(myArray, s, accumul);
            break;
        case '6':
            printBottom(myArray, s, accumul);
            printMid(myArray, s, accumul);
            printLeftUpper(myArray, s, accumul);
            printLeftBottom(myArray, s, accumul);
            printRightBottom(myArray, s, accumul);
            break;
        case '7':
            printRightUpper(myArray, s, accumul);
            printRightBottom(myArray, s, accumul);
            printUpper(myArray, s, accumul);
            break;
        case '8':
            printBottom(myArray, s, accumul);
            printUpper(myArray, s, accumul);
            printMid(myArray, s, accumul);
            printRightUpper(myArray, s, accumul);
            printRightBottom(myArray, s, accumul);
            printLeftBottom(myArray, s, accumul);
            printLeftUpper(myArray, s, accumul);
            break;
        case '9':
            printUpper(myArray, s, accumul);
            printMid(myArray, s, accumul);
            printLeftUpper(myArray, s, accumul);
            printRightUpper(myArray, s, accumul);
            printRightBottom(myArray, s, accumul);
            break;
        }
        accumul += s + 3;

    }

    for (int i = 0; i < 100; i++)
    {
        for (int j = 0; j < 100; j++)
        {
            printf("%c", myArray[i][j]);
        }
        printf("\n");
    }

    return 0;
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

c로 작성
문자열 사용 X
함수 사용 X

#include<stdio.h>

int main(void)
{
    int s, n, set, count, exponent, divide_set, i, exponent_memory, temporary_count,f;


    while (1)
    {
        scanf("%d %d", &s, &n);
        count = 0;
        exponent = 1;

        if (s == 0 && n == 0)
            break;
        else
        {
            set = n;
            while (set > 0)
            {
                set /= 10;
                count++;
            }
            if (n == 0)
                count++;

            f = temporary_count = count;
            while (count> 0)
            {
                exponent *= 10;
                count--;
            }
            exponent_memory = exponent/10;
            count = (2 * s + 3);
            while (count > 0)
            {
                set = n;
                exponent = exponent_memory;
                f = temporary_count;
                while (set > 0 || f>0)
                {
                    divide_set = set / exponent;
                    if (count == (2 * s + 3))
                    {
                        if (divide_set == 2 || divide_set == 3 || divide_set == 5 || divide_set == 6 || divide_set == 7 || divide_set == 8 || divide_set == 9 || divide_set == 0)
                        {
                            for (i = 1; i <= s + 2; i++)
                            {
                                if (i == 1 || i == s + 2)
                                    printf("%c", ' ');
                                else
                                    printf("%c", '-');
                            }
                        }
                        else
                            for (i = 1; i <= s + 2; i++)
                                printf("%c", ' ');

                        printf(" ");
                    }

                    else if (count > (2 * s + 3)/2 + 1)
                    {
                        if (divide_set == 1 || divide_set == 2 || divide_set == 3 || divide_set == 7)
                        {
                            for (i = 1; i <= s + 2; i++)
                            {
                                if (i == s + 2)
                                    printf("%c", '|');
                                else
                                    printf("%c", ' ');
                            }
                        }
                        else if (divide_set == 5 || divide_set == 6)
                            for (i = 1; i <= s + 2; i++)
                            {
                                if (i == 1)
                                    printf("%c", '|');
                                else
                                    printf(" ");
                            }
                        else
                            for (i = 1; i <= s + 2; i++)
                            {
                                if (i == 1 || i == s + 2)
                                    printf("|");
                                else
                                    printf(" ");
                            }
                        printf(" ");
                    }

                    else if (count == (2 * s + 3) / 2 + 1)
                    {
                        if (divide_set == 2 || divide_set == 3 || divide_set == 4 || divide_set == 5 || divide_set == 6 || divide_set == 8 || divide_set == 9)
                        {
                            for (i = 1; i <= s + 2; i++)
                            {
                                if (i == 1 || i == s + 2)
                                    printf("%c", ' ');
                                else
                                    printf("%c", '-');
                            }
                        }
                        else
                            for (i = 1; i <= s + 2; i++)
                                printf("%c", ' ');

                        printf(" ");
                    }
                    else if (count > 1)
                    {
                        if (divide_set == 1 || divide_set == 3 || divide_set == 4 || divide_set == 5 || divide_set == 7 || divide_set == 9)
                            for (i = 1; i <= s + 2; i++)
                            {
                                if (i == s + 2)
                                    printf("|");
                                else
                                    printf(" ");
                            }
                        else if (divide_set == 2)
                            for (i = 1; i <= s + 2; i++)
                            {
                                if (i == 1)
                                    printf("|");
                                else
                                    printf(" ");
                            }
                        else
                            for (i = 1; i <= s + 2; i++)
                            {
                                if (i == 1 || i == s + 2)
                                    printf("|");
                                else
                                    printf(" ");
                            }
                        printf(" ");
                    }
                    else
                    {
                        if (divide_set == 2 || divide_set == 3 || divide_set == 5 || divide_set == 6 || divide_set == 8 || divide_set == 9 || divide_set == 0)
                        {
                            for (i = 1; i <= s + 2; i++)
                            {
                                if (i == 1 || i == s + 2)
                                    printf("%c", ' ');
                                else
                                    printf("%c", '-');
                            }
                        }
                        else
                            for (i = 1; i <= s + 2; i++)
                                printf("%c", ' ');

                        printf(" ");
                    }
                    set %= exponent;
                    exponent /= 10;
                    f--;


                }
                printf("\n");
                count--;
            }
        }
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def lcd_disp(size, num_str):
    #  -   0
    # | | 1 2
    #  _   3
    # | | 4 5
    #  _   6
    _map = [
        '1011010111',
        '1000111111',
        '1111100111',
        '0011111011',
        '1010001010',
        '1101111111',
        '1011011010'
    ]
    def _horizon(key):
        prt = [' ', '-']
        for x in num_str:
            print (' {} '.format(prt[int(_map[key][int(x)])] * size), end=' ')
        print('')
    def _vertical(key1, key2):
        prt = [' ', '|']        
        for i in range(size):
            for x in num_str: 
                print ('{}{}{}'.format(prt[int(_map[key1][int(x)])]
                                       ,' ' * size
                                       ,prt[int(_map[key2][int(x)])]),
                       end=' ')
            print('')

    _horizon(0)
    _vertical(1, 2)
    _horizon(3)
    _vertical(4, 5)
    _horizon(6)

lcd_disp(2, '12345')
lcd_disp(3, '67890')

Python 3.5.2에서 작성하였습니다.

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
s,n = input().split()
s = int(s)

# 미리 각 숫자들마다 들어가는 라인에 대해 표현
num_dict = {'1':[0,0,1,0,0,1,0],
            '2':[1,0,1,1,1,0,1],
            '3':[1,0,1,1,0,1,1],
            '4':[0,1,1,1,0,1,0],
            '5':[1,1,0,1,0,1,1],
            '6':[1,1,0,1,1,1,1],
            '7':[1,0,1,0,0,1,0],
            '8':[1,1,1,1,1,1,1],
            '9':[1,1,1,1,0,1,1],
            '0':[1,1,1,0,1,1,1]}
#   [0]
#  -----  
# l     l 
# l     l 
# l[1]  l[2] 
# l     l 
# l [3] l 
#  -----        
# l     l      
# l     l       
# l[4]  l[5]    
# l     l      
# l [6] l       
#  -----        

num = 0     # 숫자별 리스트에 index참조를 위한 숫자?
switch = 0  # 세로출력 2번까지만 해주는 스위치 변수
while True: # 단순 반복을 위한 while문
    for val in n:   # 가로열 출력 반복문
        if num_dict[val][num] == True:  # 상 or 중 or 하 가로열이 있다 없다 판가름.
            print(' ','-'*s,'  ',sep='',end='')
        else:
            print(' '*(s+3),end='')
    num += 1                    
    print()

    if switch == 2:     # 3번째 세로열 출력하지 못하게 하는 while 탈출
        break

    for i in range(s):  # 세로열 출력을 위한 반복문
        for val in n:   # 각 문자마다 [1],[2] or [4],[5] 라인이 있는지 없는지 다르기에 하나씩 뽑는다.
            if num_dict[val][num] == True:  # [1],[4]라인
                print('l',' '*s,sep='',end='')
            else:
                print(' '*(s+1),end='')
            if num_dict[val][num+1] == True:# [2],[5]라인
                print('l',end=' ')
            else:
                print(' ',end=' ')
        print()            
    num += 2    # 세로 한번출력할때마다 2개라인씩 잡아먹기때문에 +2
    switch += 1 # 가로한번 세로한번 출력하면 +1

#### 2016.12.02 D-447 ####

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

한줄씩 계산해서 출력해나갑니다. :-)

function scan(i, size, d) {
  if (i == 0) {
    if ("02356789".indexOf(d) != -1)
      return ` ${"-".repeat(size)} `;
    else
      return ` ${" ".repeat(size)} `;
  } else if (i < size + 1) {
    let bars = [("045689".indexOf(d) != -1) ? "|" : " ",
                ("01234789".indexOf(d) != -1) ? "|" : " "]
    return bars.join(" ".repeat(size));
  } else if (i == size + 1) {
    if ("2345689".indexOf(d) != -1)
      return ` ${"-".repeat(size)} `;
    else
      return ` ${" ".repeat(size)} `;
  } else if (i < size * 2 + 2) {
    let bars = [("0268".indexOf(d) != -1) ? "|" : " ",
                ("013456789".indexOf(d) != -1) ? "|" : " "]
    return bars.join(" ".repeat(size));
  } else {
    if ("0235689".indexOf(d) != -1)
      return ` ${"-".repeat(size)} `;
    else
      return ` ${" ".repeat(size)} `;
  }
}

const size = 5;
const ds = "0123456789";

const height = size * 2 + 3;
for (let i = 0; i < height; i++) {
  console.log(ds.split("").map(d => scan(i, size, d)).join("  "))
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#encoding=utf-8
#python3.5
#codingdojang314

#파이썬에서 공백을 기준으로 입력값을 구분하는 방법 필요
size,count = input()
strCount = str(count)

for num in strCount:
    print(num)
    if int(num) == 1:
        for i in range(1,3):
            print("")
            for j in range(1,size+1):
                print("{0:^{1}}".format('|',size+1))
        print("{0:^{1}}".format('',size+1))

    elif int(num) == 2:
        for i in range(1,3):
            print("-"*size)
            for j in range(1,size+1):
                if i == 1:
                    print("{0:>{1}}".format('|',size+1))
                else:
                    print("{0:<{1}}".format('|',size+1))
        print("-"*size)

    elif int(num) == 3:
        for i in range(1,3):
            print("-"*size)
            for j in range(1,size+1):
                print("{0:>{1}}".format('|',size+1))
        print("-"*size)

    elif int(num) == 4:
        for i in range(1,3):
            if i == 1:
                for j in range(1,size+1):
                    print("{0:<{1}}".format('|',size+1)+'|')
            if i == 2:
                print("-"*size)
                for j in range(1,size+1):
                    print("{0:>{1}}".format('|',size+1))

    elif int(num) == 5:
        for i in range(1,3):
            print("-"*size)
            for j in range(1,size+1):
                if i == 1:
                    print("{0:<{1}}".format('|',size+1))
                else:
                    print("{0:>{1}}".format('|',size+1))
        print("-"*size)

    elif int(num) == 6:
        for i in range(1,3):
            print("-"*size)
            for j in range(1,size+1):
                if i == 1:
                    print("{0:<{1}}".format('|',size+1))
                else:
                    print("|"+"{0:>{1}}".format('|',size+1))
        print("-"*size)

    elif int(num) == 7:
        for i in range(1,3):
            if i == 1:
                print("-"*size)
            else:
                print("")
            for j in range(1,size+1):
                print("{0:>{1}}".format('|',size+1))
        print("{0:>{1}}".format('',size+1))

    elif int(num) == 8:
        for i in range(1,3):
            print("-"*size)
            for j in range(1,size+1):
                if i == 1:
                    print("|"+"{0:>{1}}".format('|',size+1))
                else:
                    print("|"+"{0:>{1}}".format('|',size+1))
        print("-"*size)

    elif int(num) == 9:
        for i in range(1,3):
            print("-"*size)
            for j in range(1,size+1):
                if i == 1:
                    print("|"+"{0:>{1}}".format('|',size+1))

                else:
                    print("{0:>{1}}".format('|',size+1))
        print("-"*size)

    elif int(num) == 0: 
        for i in range(1,3):
            if i == 2:
                print("")
            else:
                print("-"*size)
            for j in range(1,size+1):
                if i == 1:
                    print("|"+"{0:>{1}}".format('|',size+1))
                else:
                    print("|"+"{0:>{1}}".format('|',size+1))
        print("-"*size)

    elif num == 0 and size == 0:
        print("this is END")



※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
numDic = {0:['-', '|', '|', ' ', '|', '|', '-'],\
          1:[' ', ' ', '|', ' ', ' ', '|', ' '],\
          2:['-', ' ', '|', '-', '|', ' ', '-'],\
          3:['-', ' ', '|', '-', ' ', '|', '-'],\
          4:[' ', '|', '|', '-', ' ', '|', ' '],\
          5:['-', '|', ' ', '-', ' ', '|', '-'],\
          6:['-', '|', ' ', '-', '|', '|', '-'],\
          7:['-', ' ', '|', ' ', ' ', '|', ' '],\
          8:['-', '|', '|', '-', '|', '|', '-'],\
          9:['-', '|', '|', '-', ' ', '|', '-']}


def lcd(num, s):
    num = str(num)
    result = ['' for iter in range(5)]
    for i in num:
        x = numDic[int(i)]
        x1 = ' '+s*x[0]+'  '
        x2 = x[1]+s*' '+x[2]+' '
        x3 = ' '+s*x[3]+'  '
        x4 = x[4]+s*' '+x[5]+' '
        x5 = ' '+s*x[6]+'  '
        xList = [x1, x2, x3, x4, x5]
        for i in range(len(result)):
            result[i] += xList[i]
    print(result[0])
    for i in range(s):
        print(result[1])
    print(result[2])
    for i in range(s):
        print(result[3])
    print(result[4])
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬을 저급하게 만드는 코딩입니다.

import re

# digit from 0 to 9
d = ( (1, 1, 1, 0, 1, 1, 1), 
    (0, 0, 1, 0, 0, 1, 0),
    (1, 0, 1, 1, 1, 0, 1),
    (1, 0, 1, 1, 0, 1, 1),
    (0, 1, 1, 1, 0, 1, 0),
    (1, 1, 0, 1, 0, 1, 1),
    (1, 1, 0, 1, 1, 1, 1),
    (1, 0, 1, 0, 0, 1, 0),
    (1, 1, 1, 1, 1, 1, 1),
    (1, 1, 1, 1, 0, 1, 1) )

while True:
    # Input
    InputStr = input()

    # Inspect input values
    if not re.match(r"\d+\s\d+", InputStr):
        continue

    InputValues = InputStr.split(' ')
    s = int(InputValues[0])
    nStr = InputValues[1]
    n = int(nStr)
    l = len(nStr)

    if s == 0 and n == 0:
        break

    if (s < 1 or s >= 10) or (n < 0 or n > 99999999):
        continue

    # Prepare empty screen matrix
    cols = s + 2
    ncols = (cols + 1) * l
    rows = s * 2 + 3
    scrmtrx = [[' ' for col in range(ncols)] for row in range(rows)]

    # Fill the screen matrix with numbers
    for i in range(l): # each digit of number n
        for j in range(7):
            num = int(nStr[i])
            shift = (cols + 1) * i
            if d[num][j] :
                for k in range(s):
                    if j == 0:
                        scrmtrx[0][shift+1+k] = '-' 
                    elif j == 1:
                        scrmtrx[1+k][shift] = '|'
                    elif j == 2:
                        scrmtrx[1+k][shift+s+1] = '|'
                    elif j == 3:
                        scrmtrx[s+1][shift+1+k] = '-' 
                    elif j == 4:
                        scrmtrx[s+2+k][shift] = '|'
                    elif j == 5:
                        scrmtrx[s+2+k][shift+s+1] = '|'
                    else: # j == 6
                        scrmtrx[2*s+2][shift+1+k] = '-'

    # Print LCD
    lineStr = ""
    for i in range(rows):
        for k in range(ncols):
            lineStr += scrmtrx[i][k]
        print(lineStr)
        lineStr = ""
    print(" ")
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <iostream>
#include <vector>
#include <string>
using namespace std;

/* http://codingdojang.com/scode/314
LCD Display

한 친구가 방금 새 컴퓨터를 샀다. 그 친구가 지금까지 샀던 가장 강력한 컴퓨터는 공학용 전자 계산기였다. 
그런데 그 친구는 새 컴퓨터의 모니터보다 공학용 계산기에 있는 LCD 디스플레이가 더 좋다며 크게 실망하고 말았다. 
그 친구를 만족시킬 수 있도록 숫자를 LCD 디스플레이 방식으로 출력하는 프로그램을 만들어보자.

입력
입력 파일은 여러 줄로 구성되며 표시될 각각의 숫자마다 한 줄씩 입력된다. 
각 줄에는 s와 n이라는 두개의 정수가 들어있으며 n은 출력될 숫자( 0<= n <= 99,999,999 ), s는 숫자를 표시하는 크기( 1<= s < 10 )를 의미한다. 
0 이 두 개 입력된 줄이 있으면 입력이 종료되며 그 줄은 처리되지 않는다.

출력
입력 파일에서 지정한 숫자를 수평 방향은 '-' 기호를, 수직 방향은 '|'를 이용해서 LCD 디스플레이 형태로 출력한다. 
각 숫자는 정확하게 s+2개의 열, 2s+3개의 행으로 구성된다. 마지막 숫자를 포함한 모든 숫자를 이루는 공백을 스페이스로 채워야 한다. 
두 개의 숫자 사이에는 정확하게 한 열의 공백이 있어야 한다.

각 숫자 다음에는 빈 줄을 한 줄 출력한다. 밑에 있는 출력 예에 각 숫자를 출력하는 방식이 나와있다.

예
입력 예

2 12345
3 67890
0 0

출력 예
      --   --        --
   |    |    | |  | |
   |    |    | |  | |
      --   --   --   --
   | |       |    |    |
   | |       |    |    |
      --   --        --

 ---   ---   ---   ---   ---
|         | |   | |   | |   |
|         | |   | |   | |   |
|         | |   | |   | |   |
 ---         ---   ---
|   |     | |   |     | |   |
|   |     | |   |     | |   |
|   |     | |   |     | |   |
 ---         ---   ---   ---
*/

int main() {
    int fontSize, inputNumber;
    vector<int> vectorFontSize, vectorInputNumber;

    // pre-defined structure of each digit
    // index number is equal to actual number
    /*
     ----[0]
    |    |
    |[1] |[2]
    |    |
    |    |
     ----[3]
    |    |
    |[4] |[5]
    |    |
    |    |
     ----[6]
    */
    int digitArr[10][7] = {
        { 1, 1, 1, 0, 1, 1, 1 }, // 0
        { 0, 0, 1, 0, 0, 1, 0 }, // 1
        { 1, 0, 1, 1, 1, 0, 1 }, // 2
        { 1, 0, 1, 1, 0, 1, 1 }, // 3
        { 0, 1, 1, 1, 0, 1, 0 }, // 4
        { 1, 1, 0, 1, 0, 1, 1 }, // 5
        { 1, 1, 0, 1, 1, 1, 1 }, // 6
        { 1, 0, 1, 0, 0, 1, 0 }, // 7
        { 1, 1, 1, 1, 1, 1, 1 }, // 8
        { 1, 1, 1, 1, 0, 1, 0 }  // 9
    };

    while (true) {
        cin >> fontSize >> inputNumber;

        if (fontSize == 0 && inputNumber == 0) {
            for (unsigned int vectorIdx = 0; vectorIdx < vectorFontSize.size(); vectorIdx++) {
                string strInputNumber = to_string(vectorInputNumber[vectorIdx]);
                int positionalNumberCount = strInputNumber.length();
                int rowSize = 2 * vectorFontSize[vectorIdx] + 3;
                int colSize = vectorFontSize[vectorIdx] + 2;

                for (int rowIdx = 0; rowIdx < rowSize; rowIdx++) {
                    cout << endl;

                    for (int positionalIdx = 0; positionalIdx < positionalNumberCount; positionalIdx++) {
                        int currentNumber = strInputNumber[positionalIdx] - '0';

                        for (int colIdx = 0; colIdx < colSize; colIdx++) {
                            if (rowIdx == 0 || rowIdx == rowSize / 2 || rowIdx == rowSize - 1) {
                                if (colIdx == 0 || colIdx == colSize - 1) {
                                    cout << ' ';
                                }
                                else {
                                    if (rowIdx == 0) {
                                        cout << ((digitArr[currentNumber][0] == 1) ? '-' : ' ');
                                    }
                                    else if (rowIdx == rowSize / 2) {
                                        cout << ((digitArr[currentNumber][3] == 1) ? '-' : ' ');
                                    }
                                    else if (rowIdx == rowSize - 1) {
                                        cout << ((digitArr[currentNumber][6] == 1) ? '-' : ' ');
                                    }
                                }
                            }
                            else {
                                if (colIdx == 0 || colIdx == colSize - 1) {
                                    if (rowIdx < rowSize / 2) {
                                        if (colIdx == 0) {
                                            cout << ((digitArr[currentNumber][1] == 1) ? '|' : ' ');
                                        }
                                        else if (colIdx == colSize - 1) {
                                            cout << ((digitArr[currentNumber][2] == 1) ? '|' : ' ');
                                        }
                                    }
                                    else if (rowIdx > rowSize / 2) {
                                        if (colIdx == 0) {
                                            cout << ((digitArr[currentNumber][4] == 1) ? '|' : ' ');
                                        }
                                        else if (colIdx == colSize - 1) {
                                            cout << ((digitArr[currentNumber][5] == 1) ? '|' : ' ');
                                        }
                                    }
                                }
                                else {
                                    cout << ' ';
                                }
                            }
                        }
                        cout << ' ';
                    }
                }
                cout << endl;
            }

            break;
        }
        else {
            if (fontSize < 1 || fontSize >= 10) {
                cout << "fontSize error" << endl;

                break;
            }
            else if (inputNumber < 0 || inputNumber > 99999999) {
                cout << "inputNumber error" << endl;

                break;
            }
            else {
                vectorFontSize.push_back(fontSize);
                vectorInputNumber.push_back(inputNumber);
            }
        }
    }

    system("pause");
    return 0;
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LCD_DEBUG

#ifdef LCD_DEBUG
#define MSG_OVERFLOW(pstr)                                                  \
    printf("[ERR] %s is overflow!! %s %s %d\n",                             \
            pstr, __FILE__, __func__, __LINE__)

#define MSG_MEM_ERR                                                         \
    printf("[ERR] Memory shortage. %s %s %d\n",                             \
                __FILE__, __func__, __LINE__)

#define MSG_EMPTY_STAT                                                      \
    printf("[ERR] Memory points NULL status already. %s %s %d\n",           \
                __FILE__, __func__, __LINE__)
#else
#define MSG_OVERFLOW(pstr)
#define MSG_MEM_ERR
#define MSG_EMPTY_STAT
#endif

typedef enum
{
    BUF_SIZE = 16,

    MAX_SIZE = 10,
    MAX_NUM = 99999999

}overflow_e;

typedef struct input_data_information
{
    int size;
    char num[BUF_SIZE];

}info_t;

static inline int _check_to_escape(int size, int num);
static inline int _check_to_overflow(const char *pstr,
        int data, int start, int end);
static inline int _draw_line(int data_1, int data_2, int data_3, int size);

static void *_create_memory(void *ptr, size_t size);
static int _destory_memory(void **ppdel);

static int _draw_horizontal_line(const int (*parr)[7], info_t *pid, int *pidx);
static int _draw_vertical_line(const int (*parr)[7], info_t *pid, int *pidx);

static int _draw_number_to_display(info_t *pid);

///////////////////////////////////////////////////////////////////////////////

static inline int _check_to_escape(int size, int num)
{
    return (size == 0 && num == 0) ? -1 : 0;
}

static inline int _check_to_overflow(const char *pstr,
        int data, int start, int end)
{
    int ret = 0;

     if (data < start || data > end)
     {
         MSG_OVERFLOW(pstr);
         ret = -1;
     }

     return ret;
}

static inline int _draw_line(int data_1, int data_2, int data_3, int size)
{
    int i;

    printf("%s", data_1 ? "|" : " ");
    for (i = 0; i < size; i++)
        printf("%s", data_2 ? "-" : " ");
    printf("%s", data_3 ? "|" : " ");

    return 0;
}

static void *_create_memory(void *ptr, size_t size)
{
    void *pnew = realloc(ptr, size);
    if (pnew == NULL)
    {
        MSG_MEM_ERR;
        goto error;
    }

    return pnew;

error :
    return NULL;
}

static int _destory_memory(void **ppdel)
{
    if (ppdel == NULL)
    {
        MSG_EMPTY_STAT;
        goto error;
    }

    if (*ppdel)
    {
        free((void *)*ppdel);
        *ppdel = NULL;
    }

    return 0;

error :
    return -1;
}

static int _draw_horizontal_line(const int (*parr)[7], info_t *pid, int *pidx)
{
    int i;
    int len;

    if (pid == NULL)
    {
        MSG_EMPTY_STAT;
        goto error;
    }

    len = strlen(pid->num);
    for (i = 0; i < len; i++)
        _draw_line(0, parr[pid->num[i] - '0'][*pidx], 0, pid->size);

    (*pidx)++;
    printf("\n");

    return 0;

error :
    return -1;
}

static int _draw_vertical_line(const int (*parr)[7], info_t *pid, int *pidx)
{
    int i;
    int j;
    int len;

    if (pid == NULL)
    {
        MSG_EMPTY_STAT;
        goto error;
    }

    len = strlen(pid->num);
    for (i = 0; i < pid->size; i++)
    {
        for (j = 0; j < len; j++)
        {
            _draw_line(parr[pid->num[j] - '0'][*pidx], 0,
                    parr[pid->num[j] - '0'][*pidx + 1], pid->size);
        }
        printf("\n");
    }

    (*pidx) += 2;

    return 0;

error :
    return -1;
}

static int _draw_number_to_display(info_t *pid)
{
    int idx = 0;
    const int draw_arr[10][7] =
    {
        {1, 1, 1, 0, 1, 1, 1},      // 0
        {0, 0, 1, 0, 0, 1, 0},      // 1
        {1, 0, 1, 1, 1, 0, 1},      // 2
        {1, 0, 1, 1, 0, 1, 1},      // 3
        {0, 1, 1, 1, 0, 1, 0},      // 4
        {1, 1, 0, 1, 0, 1, 1},      // 5
        {1, 1, 0, 1, 1, 1, 1},      // 6
        {1, 1, 1, 0, 0, 1, 0},      // 7
        {1, 1, 1, 1, 1, 1, 1},      // 8
        {1, 1, 1, 1, 0, 1, 1},      // 9
    };

    if (pid == NULL)
    {
        MSG_EMPTY_STAT;
        goto error;
    }

    if (_draw_horizontal_line(draw_arr, pid, &idx) < 0)
        goto error;

    if (_draw_vertical_line(draw_arr, pid, &idx) < 0)
        goto error;

    if (_draw_horizontal_line(draw_arr, pid, &idx) < 0)
        goto error;

    if (_draw_vertical_line(draw_arr, pid, &idx) < 0)
        goto error;

    if (_draw_horizontal_line(draw_arr, pid, &idx) < 0)
        goto error;

    return 0;

error :
    return -1;
}

int main(void)
{
    int i;

    int size = 1;
    int num = 1;
    int vari_cnt = 0;

    char str[BUF_SIZE] = {0 ,};

    info_t *pid = NULL;

    while (1)
    {
        scanf("%d %s", &size, str);
        num = atoi(str);

        if (_check_to_escape(size, num) < 0)
            break;

        if (_check_to_overflow("Size", size, 1, MAX_SIZE) < 0)
            goto error;

        if (_check_to_overflow("Number", num, 0, MAX_NUM) < 0)
            goto error;

        vari_cnt++;
        pid = _create_memory((void *)pid, sizeof(info_t) * vari_cnt);
        if (pid == NULL)
            goto error;

        pid[vari_cnt - 1].size = size;
        memmove((void *)&pid[vari_cnt - 1].num, (const void *)str, sizeof(str));
    }

    for (i = 0; i < vari_cnt; i++)
        _draw_number_to_display(&pid[i]);

error :
    _destory_memory((void **)&pid);
    return 0;
}

후,, 제법 까다롭네요 ㅠㅠ c 언어로 작성했습니다.

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

※ 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.


언어별 풀이 현황
전 체 x 90
기 타 x 16
cpp x 14
java x 11
python x 33
lua x 1
ruby x 2
php x 2
scala x 2
cs x 2
haskell x 1
go x 2
delphi x 1
javascript x 2
objectivec x 1