본문 바로가기
프로그램/Python 1000제

Python 66제] 숫자 마름모 출력하는 프로그램을 작성하시오.

by 건티 2022. 4. 25.
728x90

출처] 반크_세계유산 고인돌

 

문제]

임의의 정수를 입력하여  그 수에 대응하는 숫자 마름모를 출력하시오.

조건)

1. 입력하는 숫자의 범위는 2~6까지의 정수로 한다.
2. 조건 이외의 수가 입력되면 "2~6범위 밖의 수입니다."를 출력하고 다시 입력한다.
3. 출력은 아래와 같이 마름로 형태이어야 한다.

  1  
3   3
  2  


4. 결과 출력 후, 계속작업여부를 물어 N이면 "수고하셨습니다."를 출력 후 끝낸다.

 

입력 예시1)

원하는 수를 입력하시오 : 1

 

출력 예시1)

2~6범위 밖의 수입니다.

다시 입력하세요...

 

입력 예시2)

원하는 수를 입력하시오 : 5

 

출력 예시2)

        1          
      3   3        
    8   2   8      
  20   5   5   20    
48   12   3   12   48  
  28   7   7   28    
    16   4   16      
      9   9        
        5          
                   

계속하시겠습니까?(Y/N) p

y/Y/n/N만 입력하세요

다시 입력하세요...

 

계속하시겠습니까?(Y/N) n

수고하셨습니다.

 

참고풀이]

#무한반복한다.
while True:
    #임의의 정수를 입력받는다.
    while True:
        N=int(input("원하는 수를 입력하시오 : "))
        if 1<N<7: break
        print("2~6범위 밖의 수입니다.")
        print("다시 입력하세요...")
    #(2*N) * (2*N)의 리스트를 선언하고 초기값을 0으로 셋팅한다.
    L=[[0 for j in range(N*2)] for i in range(N*2)]

    #첫행~끝행의 가운데 열에 1~N까지의 증가값을 넣는다.
    #행은 2씩 증가한다.
    Cnt=0
    c=N-1
    for r in range(0,N*2,2):
        Cnt+=1
        L[r][c]=Cnt

    #입력수-1만큼 반복한다.
    #행은 0행에서 증가하고 N*2행에서는 감소하여 2씩 증가하여
    #값을 넣을 행을 정한다.
    #열은 가운데 열을 중심으로 감소열과 증가열을 정하여
    #값을 더한다.
    r_start=0
    r_end=N*2
    c_sub=N-1
    c_add=N-1
    for i in range(N-1):
        r_start+=1
        r_end-=1
        c_sub-=1
        c_add+=1
        for r in range(r_start, r_end,2):
            L[r][c_sub]=L[r-1][c_sub+1]+L[r+1][c_sub+1]
            L[r][c_add]=L[r-1][c_add-1]+L[r+1][c_add-1]

    #결과출력
    for r in range(N*2):
        for c in range(N*2):
            if L[r][c]==0:
                print("   ",end='')
            else:
                print(f"{L[r][c]:3}",end='')
        print()

    #계속 작업여부 파악부분
    while True:
        chk=input("계속하시겠습니까?(Y/N) ")
        if chk.upper()=='Y' or chk.upper()=='N':
            break
        print("y/Y/n/N만 입력하세요")
        print("다시 입력하세요...")
    if chk.upper()=='N':
        break
    
#작업을 끝낸다.
print("수고하셨습니다.")

 

참고풀이 결과]

 

 

 

 

대한민국의 아름다운 영토, 독도의 가을

 

반응형

댓글