본문 바로가기

Programming/Algorithm

[Python3] 디지털 숫자 찍기

어떤 숫자가 입력 되었을 때 '|' 과 '-'으로 디지털 숫자를 만드는 프로그램이다. 숫자들 끼리는 서로 공백을 두고 출력되며 길이를 입력받아 조정할 수 있다고 하자. 

 문제를 처음 생각했을 때 각 숫자에대해 모든 경우를 짜다가 조금더 효율적인 방법이 떠올랐다. 바로 공통적으로 표시되는 부분을 따로 엮어서 코드를 짜는 것이다. 아두이노에서도 비슷한 방법으로 코딩하는데, 세븐세그먼트 라는 부품을 활용하여 다음과 같이 표시하는 것이다.

알고리즘은 다음과 같다.

우선 길이를 입력받고 숫자를 입력받는다.

그 후 길이에 맞게 세로 줄 배열을 배열안에 만든다.

뚜껑(?) 부분이 들어가는(0,2,3,5,6,7,8,9)곳은 -로 채워준다.

나머지 부분도 똑같이 채운다.

배열을 띄어쓰기와 줄바꿈으로 적절히 배치한다.

말은 굉장히 간단해 보이지만, 노가다성이 필요하다.

count=int(input())

n=input()

l=[]

for j in range(count*2+3):

    l.append([])


for i in range(len(n)):

    if (n[i] in ['0','2','3','5','6','7','8','9']):

        l[0].append(" "+count*"-"+" ")

    else:

        l[0].append(" "+count*" "+" ") #뚜껑

    if (n[i] in ['0','4','8','9']):

        for k in range(1,count+1):

            l[k].append("|"+count*" "+"|")

    elif (n[i] in ['5','6']):

        for k in range(1,count+1):

            l[k].append("|"+count*" "+" ")

    else:

        for k in range(1,count+1):

            l[k].append(" "+count*" "+"|") #위쪽 양옆

    if (n[i] in ['0','1','7']):

    l[count+1].append(" "*(count+2))

    else:

        l[count+1].append(" "+"-"*count+" ") #중간

    if(n[i] in ['0','6','8']):

        for k in range(count+2,2*count+2):

            l[k].append("|"+count*" "+"|")

    elif(n[i]=='2'):

        for k in range(count+2,2*count+2):

            l[k].append("|"+count*" "+" ")

    else:

        for k in range(count+2,2*count+2):

            l[k].append(" "+count*" "+"|") #아래 양옆

 

    if(n[i] in ['0','2','3','5','6','8','9']):

        l[-1].append(" "+count*"-"+" ")

    else:

        l[-1].append(" "+count*" "+" ") #바닥

 

for k in l:

print(" ".join(k))


'Programming > Algorithm' 카테고리의 다른 글

[Python3] 변수 스왑  (0) 2016.12.11
[Python3] 올바른 괄호 판단하기1  (0) 2016.12.06
[Python3] 바퀴벌레 문제  (2) 2016.12.02
[Python3] 올바른 괄호  (2) 2016.11.17
[Python3] 집합, 자연수 분할  (0) 2016.11.09