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

출력 예

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

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

78개의 풀이가 있습니다. 8 / 8 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(" ")
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

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

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


언어별 풀이 현황
전 체 x 78
haskell x 1
java x 9
scala x 2
python x 28
delphi x 1
javascript x 2
lua x 1
기 타 x 14
go x 1
cpp x 13
objectivec x 1
php x 2
ruby x 2
cs x 1