출처] 반크_세계유산 고인돌
문제]
임의의 정수 N을 입력하여 N*N의 홀수마방진 프로그램을 작성하시오.
조건)
▶ N은 3<=N<20 범위이다.
▶ 범위 또는 짝수를 입력하면 에러 메세지를 띄우고 다시 입력한다.
▶ 첫번째 행의 중간 열에 1을 채운다.
▶ 증가값이 N으로 나눈 나머지가 1이면 행만 증가하여 증가값을 채운다.
▶ 그외 행은 1감소하고 열은 1증가한 위치에 증가값을 채운다.
▶ 행이 첫번째 행보다 작으면 행은 N번째 행으로 한다.
▶ 열이 N번째 열보다 크면 열은 첫번째 열로 정한다.
입력 예시1)
3~20사이의 홀수를 입력하시오 : 4
출력 예시1)
4은(는) 3~20사이의 짝수입니다.
다시 입력하세요...
입력 예시2)
3~20사이의 홀수를 입력하시오 : 50
출력 예시2)
50은(는) 3~20사이의 범위를 벗어난 수입니다.
다시 입력하세요...
입력 예시3)
3~20사이의 홀수를 입력하시오 : 5
출력 예시2)
17 | 24 | 1 | 8 | 15 |
23 | 5 | 7 | 14 | 16 |
4 | 6 | 13 | 20 | 22 |
10 | 12 | 19 | 21 | 3 |
11 | 18 | 25 | 2 | 9 |
참고풀이]
#임의의 정수를 입력한다.
while True:
N=int(input("3~20사이의 홀수를 입력하시오 : "))
if 3<=N<20:
if N%2==1:
break
else:
print(f"{N}은(는) 3~20사이의 짝수입니다.")
else:
print(f"{N}은(는) 3~20사이의 범위를 벗어난 수입니다.")
print("다시 입력하세요...\n")
#홀수 마방진 구하기
#N*N의 리스트를 선언하고 초기값을 0으로 셋팅한다.
L=[[0 for j in range(N)] for i in range(N)]
#첫번째행, 중간열에 1을 채운다.
r=0
c=N//2
cnt=1
L[r][c]=cnt
while True:
cnt+=1
#증가값이 입력수N*N보다 크면 작업을 끝낸다.
if cnt>N*N: break
#증가값이 N으로 나눈 나머지가 1이면 행만 1증가하고
#아니면 행은 1감소, 열은 1증가한다.
if cnt%N==1:
r+=1
else:
r-=1
c+=1
#행이 첫번째 행보다 작으면 행을 N번째 행으로 정한다.
if r<0: r=N-1
#열이 N번째 열보다 크면 열을 첫번째 열로 정한다.
if c>N-1: c=0
#리스트의 행열위치에 증가값을 넣는다.
L[r][c]=cnt
#결과출력
for Line in L:
for su in Line:
print(f"{su:3}",end='')
print()
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 봄
'프로그램 > Python 1000제' 카테고리의 다른 글
Python 66제] 숫자 마름모 출력하는 프로그램을 작성하시오. (0) | 2022.04.25 |
---|---|
Python 65제] 4X4 마방진 프로그램을 작성하시오. (0) | 2022.04.21 |
Python 63제] 주민등록번호, 이름, 학번을 입력하여 생일,나이,성별, 기수, 학년, 반, 그리고 번호를 구하시오. (0) | 2022.04.19 |
Python 62제] 임의의 두자리 수를 10개 입력하여 최대값과 최소값의 차를 구하시오. (0) | 2022.04.19 |
Python 61제] 파이썬 Express p188 도전문제 1부터 100사이의 소수만 구하여 출력하기 (0) | 2022.04.15 |
댓글