한 친구가 방금 새 컴퓨터를 샀다. 그 친구가 지금까지 샀던 가장 강력한 컴퓨터는 공학용 전자 계산기였다. 그런데 그 친구는 새 컴퓨터의 모니터보다 공학용 계산기에 있는 LCD 디스플레이가 더 좋다며 크게 실망하고 말았다. 그 친구를 만족시킬 수 있도록 숫자를 LCD 디스플레이 방식으로 출력하는 프로그램을 만들어보자.
입력
입력 파일은 여러 줄로 구성되며 표시될 각각의 숫자마다 한 줄씩 입력된다. 각 줄에는 s와 n이라는 두개의 정수가 들어있으며 n은 출력될 숫자( 0<= n <= 99,999,999 ), s는 숫자를 표시하는 크기( 1<= s < 10 )를 의미한다. 0 이 두 개 입력된 줄이 있으면 입력이 종료되며 그 줄은 처리되지 않는다.
출력
입력 파일에서 지정한 숫자를 수평 방향은 '-' 기호를, 수직 방향은 '|'를 이용해서 LCD 디스플레이 형태로 출력한다. 각 숫자는 정확하게 s+2개의 열, 2s+3개의 행으로 구성된다. 마지막 숫자를 포함한 모든 숫자를 이루는 공백을 스페이스로 채워야 한다. 두 개의 숫자 사이에는 정확하게 한 열의 공백이 있어야 한다.
풀이
#!/usr/bin/python # -*- coding: utf-8 -*- q = { '1': { 0: lambda c: [c, 0, 0], 1: lambda c: [0, (c - 1), 1], 2: lambda c: [c, 0, 0], 3: lambda c: [0, (c - 1), 1], 4: lambda c: [c, 0, 0], }, '2': { 0: lambda c: [1, (c - 2), 1], 1: lambda c: [0, (c - 1), 1], 2: lambda c: [1, (c - 2), 1], 3: lambda c: [1, (c - 1), 0], 4: lambda c: [1, (c - 2), 1], }, '3': { 0: lambda c: [1, (c - 2), 1], 1: lambda c: [0, (c - 1), 1], 2: lambda c: [1, (c - 2), 1], 3: lambda c: [0, (c - 1), 1], 4: lambda c: [1, (c - 2), 1], }, '4': { 0: lambda c: [c, 0, 0], 1: lambda c: [1, (c - 2), 1], 2: lambda c: [1, (c - 2), 1], 3: lambda c: [0, (c - 1), 1], 4: lambda c: [c, 0, 0], }, '5': { 0: lambda c: [1, (c - 2), 1], 1: lambda c: [1, (c - 1), 0], 2: lambda c: [1, (c - 2), 1], 3: lambda c: [0, (c - 1), 1], 4: lambda c: [1, (c - 2), 1], }, '6': { 0: lambda c: [1, (c - 2), 1], 1: lambda c: [1, (c - 1), 0], 2: lambda c: [1, (c - 2), 1], 3: lambda c: [1, (c - 2), 1], 4: lambda c: [1, (c - 2), 1], }, '7': { 0: lambda c: [1, (c - 2), 1], 1: lambda c: [0, (c - 1), 1], 2: lambda c: [c, 0, 0], 3: lambda c: [0, (c - 1), 1], 4: lambda c: [c, 0, 0], }, '8': { 0: lambda c: [1, (c - 2), 1], 1: lambda c: [1, (c - 2), 1], 2: lambda c: [1, (c - 2), 1], 3: lambda c: [1, (c - 2), 1], 4: lambda c: [1, (c - 2), 1], }, '9': { 0: lambda c: [1, (c - 2), 1], 1: lambda c: [1, (c - 2), 1], 2: lambda c: [1, (c - 2), 1], 3: lambda c: [0, (c - 1), 1], 4: lambda c: [1, (c - 2), 1], }, '0': { 0: lambda c: [1, (c - 2), 1], 1: lambda c: [1, (c - 2), 1], 2: lambda c: [c, 0, 0], 3: lambda c: [1, (c - 2), 1], 4: lambda c: [1, (c - 2), 1], }, } def print_x(s, nums): if s <= 0: return c = s + 2 r = s * 2 + 3 print ''.join([' ' * q[n][0](c)[0] + '-' * q[n][0](c)[1] + ' ' * q[n][0](c)[2] + ' ' for n in nums]) print '\n'.join([''.join(['|' * q[n][1](c)[0] + ' ' * q[n][1](c)[1] + '|' * q[n][1](c)[2] + ' ' for n in nums]) for i in xrange(0, r / 2 - 1)]) print ''.join([' ' * q[n][2](c)[0] + '-' * q[n][2](c)[1] + ' ' * q[n][2](c)[2] + ' ' for n in nums]) print '\n'.join([''.join(['|' * q[n][3](c)[0] + ' ' * q[n][3](c)[1] + '|' * q[n][3](c)[2] + ' ' for n in nums]) for i in xrange(0, r / 2 - 1)]) print ''.join([' ' * q[n][4](c)[0] + '-' * q[n][4](c)[1] + ' ' * q[n][4](c)[2] + ' ' for n in nums]) print_x(2, '1234567890') print '' print_x(4, '1234567890')
실행 결과는 아래와 같다.
-- -- -- -- -- -- -- -- | | | | | | | | | | | | | | | | | | | | | | | | | | | | -- -- -- -- -- -- -- | | | | | | | | | | | | | | | | | | | | | | | | | | -- -- -- -- -- -- -- ---- ---- ---- ---- ---- ---- ---- ---- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ---- ---- ---- ---- ---- ---- ---- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ---- ---- ---- ---- ---- ---- ----