알고리즘 책에 주로 나오는 LCD 디스플레이 문제를 풀어봅시다.
전자시계나 계산기에 나오는 LCD 디스플레이를 보시면, 숫자가 세그먼트 방식으로 표시가 됩니다.
7개의 수평, 수직 막대로 숫자를 표시하는 방식입니다. 많이들 보셨을 겁니다.
숫자를 입력 받아서, LCD 디스플레이 방식으로 출력하는 프로그램을 만들어 봅시다.
입력
입력은 두 개의 정수를 받습니다. 첫번째 숫자는 크기를 의미하고 두번째 숫자는 출력할 숫자를 의미합니다.
크기는 "1 ≤ 크기 ≤ 10" 범위를 가지고, 출력할 숫자의 범위는 "0 ≤ 숫자 ≤ 99,999,999" 입니다.
0을 2번 입력하면, 프로그램을 종료합니다.
출력
입력 받은 크기만큼, 지정한 숫자를 출력합니다.
수평 방향은 '-', 수직방향은 '|' 을 이용해서 LCD 디스플레이 형태로 출력합니다.
그러면 각 숫자는 (크기 + 2)개의 열과 (2 x 크기 + 3)개의 행으로 구성되게 됩니다.
숫자가 있는 부분을 제외한 공백은 스페이스(' ') 로 채워야 합니다.
두개의 숫자 사이에는 한 열의 공백이 있어야 합니다.
예제
해설
특별한 건 없습니다. For loop를 시험하는 테스트라고 할 수 있습니다.
각 숫자 '0' ~ '9' 에 대한 출력 패턴을 정의하고, 입력 받은 숫자에 맞춰 패턴을 반복해서 출력해 줍니다.
# LCDDisplay.py , 0004 quiz
# written by badsaram
import sys
class LCDDisplay(object):
def __init__(self):
self.space = 0
self.number = 0
self.pattern = []
self.pattern.append([1, 1, 1, 0, 1, 1, 1]) # 0
self.pattern.append([0, 0, 1, 0, 0, 1, 0]) # 1
self.pattern.append([1, 0, 1, 1, 1, 0, 1]) # 2
self.pattern.append([1, 0, 1, 1, 0, 1, 1]) # 3
self.pattern.append([0, 1, 1, 1, 0, 1, 0]) # 4
self.pattern.append([1, 1, 0, 1, 0, 1, 1]) # 5
self.pattern.append([1, 1, 0, 1, 1, 1, 1]) # 6
self.pattern.append([1, 1, 1, 0, 0, 1, 0]) # 7
self.pattern.append([1, 1, 1, 1, 1, 1, 1]) # 8
self.pattern.append([1, 1, 1, 1, 0, 1, 1]) # 9
def inputNumber(self):
str = input()
arr = str.split(' ')
if ((len(arr) != 2) or (arr[0].isdigit() == False) or (arr[1].isdigit() == False)):
print("input 2 numbers(space, number), e.g.) 2 12345 , 3 45678")
return False
temp1 = int(arr[0])
temp2 = int(arr[1])
if ((temp1 == 0) and (temp2 == 0)):
sys.exit()
elif((temp1 <= 0) or (temp1 > 10) or (temp2 < 0) or (temp2 > 100000000)):
print("1 <= space <= 10, 0 <= number <= 100000000")
return False
self.space = temp1
self.number = arr[1]
return True
def printNumber(self):
for i in range(0, self.space * 2 + 3):
self.printLine(i)
print('')
def printLine(self, line):
if (line == 0):
self.print1st()
elif (line < (self.space + 1)):
self.print2nd()
elif (line == (self.space + 1)):
self.print3rd()
elif (line < ((self.space + 1) * 2)):
self.print4th()
else:
self.print5th()
def printHoriSep(self, pattern):
if (pattern == 1):
print("-", end='')
else:
print(" ", end='')
def printVertSep(self, pattern):
if (pattern == 1):
print("|", end='')
else:
print(" ", end='')
def print1st(self):
for i in self.number:
index = int(i)
print(" ", end='')
for j in range(0, self.space):
self.printHoriSep(self.pattern[index][0])
print(" ", end='')
print(" ", end='')
def print2nd(self):
for i in self.number:
index = int(i)
self.printVertSep(self.pattern[index][1])
for j in range(0, self.space):
print(' ', end='')
self.printVertSep(self.pattern[index][2])
print(" ", end='')
def print3rd(self):
for i in self.number:
index = int(i)
print(" ", end='')
for j in range(0, self.space):
self.printHoriSep(self.pattern[index][3])
print(" ", end='')
print(" ", end='')
def print4th(self):
for i in self.number:
index = int(i)
self.printVertSep(self.pattern[index][4])
for j in range(0, self.space):
print(' ', end='')
self.printVertSep(self.pattern[index][5])
print(" ", end='')
def print5th(self):
for i in self.number:
index = int(i)
print(" ", end='')
for j in range(0, self.space):
self.printHoriSep(self.pattern[index][6])
print(" ", end='')
print(" ", end='')
if __name__ == "__main__" :
obj = LCDDisplay()
while (True):
if (obj.inputNumber() == True):
obj.printNumber()
'코딩 테스트' 카테고리의 다른 글
문제 6 : 인터프리터(Interpreter) (0) | 2022.07.28 |
---|---|
문제 5 : 그래픽 편집기 (0) | 2022.07.27 |
문제 3 : 여행 경비 계산 (0) | 2022.07.20 |
문제 2 : 지뢰 찾기 (0) | 2022.07.18 |
문제 1 : 3n+1, 콜라츠 추측, 우박 수열 (0) | 2022.07.15 |