[알고리즘] 격자판 최대합

(문제) 격자판 최대합


5 * 5 격자판에 아래롸 같이 숫자가 적혀있습니다.



N * N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가 장 큰 합을 출력합니다.

입력설명

첫 줄에 자연수 N이 주어진다.(1<=N<=50)

두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다.

각 자연수는 100을 넘지 않는다.

출력설명

최대합을 출력합니다.

테스트케이스

입력예제 출력예제
5
10 13 10 12 15
12 39 30 23 11
11 25 50 53 15
19 27 29 37 27
19 13 30 13 19
155
10
75 79 6 72 40 72 28 43 64 19
97 71 12 48 64 95 64 40 38 24
52 17 58 64 13 37 38 5 30 36
43 30 15 8 13 21 81 29 79 33
20 4 31 24 93 60 61 19 9 88
12 33 30 4 38 62 98 34 65 33
37 26 6 60 82 57 49 85 66 67
93 4 29 67 65 96 5 27 39 87
16 52 8 7 56 19 8 53 52 93
87 55 58 84 61 92 3 74 66 34
614

해결방법

반복문을 돌려서 가로, 세로, 대각선 들의 합을 구한다.


코드

n = int(input())

arr = [list(map(int, input().split())) for _ in range(n)]

_max = -2147000000
_sum = 0

for i in range(n):
    # 가로 먼저
    for j in range(n):
        _sum = _sum + arr[i][j]
    # print(_sum)
    
    if _max < _sum:
        _max = _sum
    
    _sum = 0

    # 세로
    for j in range(n):
        _sum = _sum + arr[j][i]

    if _max < _sum:
        _max = _sum
    
    _sum = 0

# 왼쪽 위에서 오른쪽 아래 대각선
for i in range(n):
    _sum = _sum + arr[i][i]

    if _max < _sum:
        _max = _sum
    
_sum = 0

# 오른쪽 위에서 왼쪽 아래 대각선
for i in range(n):
    _sum = _sum + arr[(n-1)-i][(n-1)-i]

    if _max < _sum:
        _max = _sum
    
print(_max)

댓글남기기