본문 바로가기

python

파이썬/python/마방진 문제

마방진은 가로, 세로, 대각선 어느 방향으로 합계를 계산해도 같은 값이 나오는 숫자의 배열이다.

마방진에는 다음과 같은 규칙이 있다.

 

1. 홀수 행렬에서만 가능하다.

2. 최초의 '1'이 채워지는 자리는 첫 줄 정 가운데 열이다. 

3. 직전에 채워진 숫자가 행렬의 차수(n)의 배수면 다음 숫자는 아래 방향만 채운다.

4. 직전에 채워진 숫자가 행렬의 차수(n)의 배수가 아니면 다음 숫자는 오른쪽 위 방향에 채운다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
print ("Hello, world!")
 
= int(input('1이 아닌 홀수를 입력하시오 : '))
if n % 2 == 0:
    print('다시 입력하시오 : ')
    input('1이 아닌 홀수를 입력하시오 : ')
    
data = [[0* n for i in range(n)]
 
= 0; j = int(n/2)
 
for k in range(1, n **2 + 1):
    data[i][j] = k
    if k % n == 0:
        i += 1
    else:
        i -= 1
        i = n-1 if i < 0 else i
        j += 1
        j = 0 if j == n else j
        
for i in range(len(data)):
    for i in range(len(data[0])):
        print('3%d ' % data[i][j], end = '')
    print() 
cs