▼考え方
N=3(3×3×3)の三次元配列が与えられたことを想定し、3要素からなる縦列・横列・斜め列の和のうち最大値を求めるという前提で、説明します。
[概要]
3×3×3の立方体を考えます。要素は1~27の数字とします。
[処理1]
x,z軸における縦列・横列・斜め列の和を計算します。
[処理2]
y,z軸における縦列・横列・斜め列の和を計算します。
[処理3]
x,y軸における斜め列の和の計算を計算します。縦列・横列は処理1,2で計算済みです。
[処理4]
x,y,z軸における斜め列の和の計算を計算します。
[処理5]
処理1~4で求めた列の和の最大値の計算をします。
▼コード
########## 処理0(準備) インプット,リスト定義 ###########
N = int(input())
A = []
########## 処理1 x,z軸における縦列・横列・斜め列の和の計算 ###########
# xz: 縦列の和の計算用のリスト
xz = []
# xz_naname: 斜め列の和の計算用のリスト
xz_naname = [0]*2*N
# xz_tmp: 3×3の入力ごとに計算するためのリスト
xz_tmp = [[0]*N]*N
for i in range(N):
for j in range(N):
xz_tmp[j] = list(map(int,input().split()))
A.append(xz_tmp[j])
for j in range(N):
xz.append(sum(xz_tmp[j]))
xz_naname[2*i] += xz_tmp[j][N-1-j]
for k in range(N):
if j == 0:
xz.append(sum(xz_tmp_r[k] for xz_tmp_r in xz_tmp))
if j == k:
xz_naname[2*i+1] += xz_tmp[j][k]
xz_tmp = [[0]*N]*N
########## 処理2 y,z軸における縦列・横列・斜め列の和の計算 ###########
# yz: 縦列の和の計算用のリスト
yz = [0]*(N**2)
# yz_naname: 斜め列の和の計算用のリスト
yz_naname = [0]*2*(N**2)
s = 0
for j in range(N):
for i in range(N):
yz_naname[2*j] += A[(N-1)+(N-1)*i][j]
yz_naname[2*j+1] += A[0+(N+1)*i][j]
for k in range(N):
yz[s] += A[j+N*k][i]
s += 1
########## 処理3 x,y軸における斜め列の和の計算 ###########
########## ※縦列・横列は処理1,2で計算済み ###########
# xy_naname: 斜め列の和の計算用のリスト
xy_naname = [0]*2*(N**2)
for j in range(N):
for i in range(N):
xy_naname[2*j] += A[j+N*i][i]
xy_naname[2*j+1] += A[j+N*i][(N-1)-i]
########## 処理4 x,y,z軸における斜め列の和の計算 ###########
# xyz_naname: 斜め列の和の計算用のリスト
xyz_naname = [0]*4
for j in range(N):
xyz_naname[0] += A[(N-1)+(N-1)*j][0+j]
xyz_naname[1] += A[(N-1)+(N-1)*j][(N-1)-j]
xyz_naname[2] += A[(N*N-1)-(N+1)*j][0+j]
xyz_naname[3] += A[(N*N-1)-(N+1)*j][(N-1)-j]
########## 処理5 処理1~4で求めた列の和の最大値の計算 ###########
print(max(xz + xz_naname + yz + yz_naname + xy_naname + xyz_naname))