4주차 실습문제

N x M 크기의 행렬을 입력받는다. 이 행렬에서 N개의 행을 N/2개로 분할하고(axis = 0 기준 N/2개로 분할), M개의 열을 M/2개로 분할해서 (axis = 1 기준 M/2개로 분할) N/2 * M/2 개의 부분 행렬로 분할할 수 있다. 이 부분 행렬들 중 원소들의 합이 가장 높은 부분합을 구하시오.

ex) (6 x 4) 10 12 15 17 19 14 2 3 3 17 2 5 14 17 7 2 6 17 15 15 2 10 5 010

Untitled

10 12 | 15 17 19 14 | 2 3

3 17 | 2 5 -> N/2 * M/2 = 6개의 부분행렬 14 17 | 7 2

6 17 | 15 15 2 10 | 5 0

Untitled

각 부분행렬의 원소들의 합은 [55 37 51 16 35 35] 로, 가장 큰 부분합은 55

Input) 6 4 10 12 15 17 19 14 2 3 3 17 2 5 14 17 7 2 6 17 15 15 2 10 5 0 Output) 55

Input) 4 6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Output) 82

import numpy as np

arr=[]
x=1
y=1
n=1
while(n%2!=0):
    n = int(input('행렬의 개수 입력 '))
    if(n%2!=0) : print('짝수가 아닙니다')
    
while(x%2!=0):
    x = int(input('행의 개수'))
    if(x%2!=0) : print('짝수가 아닙니다')
    
while(y%2!=0):
    y = int(input('열의 개수'))
    if(y%2!=0) : print('짝수가 아닙니다')

a = x/2
b = y/2
a = int(a)
b = int(b)

for i in range(n):
    number = int(input())
    arr.append(number)
#
narr = np.array(arr)
narr = np.reshape(narr,(x,y))
print(narr)

a1 = narr[:a,:b]
a2 = narr[a:,:b]
a3 = narr[:a,b:]
a4 = narr[a:,b:]
#
a1 = a1.sum(axis=1)
a2 = a2.sum(axis=1)
a3 = a3.sum(axis=1)
a4 = a4.sum(axis=1)
a1 = a1.sum(axis=0)
a2 = a2.sum(axis=0)
a3 = a3.sum(axis=0)
a4 = a4.sum(axis=0)
max = max(a1,a2,a3,a4)

print(a1)
print(a2)
print(a3)
print(a4)
print(max)