5*=*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

 

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

 

▣ 입력설명
첫 줄에 자연수 N이 주어진다.(1<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.

 

▣ 출력설명
최대합을 출력합니다.

 

▣ 입력예제 1
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

 

▣ 출력예제 1
155

 

풀이1

 >> 가로최대합, 세로최대합, 오른쪽 대각선 최대합, 왼쪽 대각선 최대합 각각 구하기

 >> 리스트에 붙여넣고 정렬해서 마지막자리 [-1] 해서 최대값 찾아줌

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
'''arr = [[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]]'''
 
arr = [[1013101215],
       [1239302311],
       [1125505315],
       [1927293727],
       [1913301319]]
 
print(arr)
= 5
 
widthSum = []
heightSum = []
leftCrossSum = 0
rightCrossSum = 0
allSum = []
sum = 0
sum2 = 0
sum3 = 0
sum4 = 0
 
#가로합 리스트
for i in range(0, n):
    for j in range(0, n):
        print(i,'*',j)
        sum += arr[i][j]        #가로합 리스트
    widthSum.append(sum)
    sum = 0
print(widthSum)
 
#세로합 리스트
for i in range(0, n):
    for j in range(0, n):
        print(i,'*',j)
        sum2 += arr[j][i]       #세로합 리스트
    heightSum.append(sum2)
    sum2 = 0
print(heightSum)
 
#왼쪽 대각선
for i in range(0, n):
    print(i,'*',i)
    sum3 += arr[i][i]           #왼쪽 대각선
print(sum3)
 
#오른쪽 대각선
for i in range(0, n):
    print((n-i)-1,'*',i)
    sum4 += arr[(n-i)-1][i]     #오른쪽 대각선
print(sum4)
 
 
sum3 = sum4 = 0
#한개로 만들기
for i in range(0, n):
    sum = sum2 = 0
    sum3 += arr[i][i]           #왼쪽 대각선
    sum4 += arr[(n-i)-1][i]     #오른쪽 대각선
    allSum.append(sum3)
    allSum.append(sum4)
    for j in range(0, n):
        sum += arr[i][j]        #가로합 리스트
        sum2 += arr[j][i]       #세로합 리스트
    allSum.append(sum)
    allSum.append(sum2)
 
allSum.sort()
print(allSum)
print('가장 큰 값:',allSum[-1])
cs

 

풀이 2

>> 가로, 세로 최대값 구하기

>> 왼쪽 대각선, 오른쪽 대각선 최대값 구하기

>> largest로 계속 큰 값 찾기

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
26
27
28
29
30
31
import sys
sys.stdin=open("input.txt""r")
= int(input())
= [list(map(int, input().split())) for _ in range(n)] #이차원 리스트 추가
'''print(a)        #한줄로 출력
for x in a :
    print(x)    #여러줄로 출력'''
 
largest = -2147000000
 
#가로 세로 최대 값 찾기
for i in range(n):
    sum1 = sum2 = 0
    for j in range(n):
        sum1+=a[i][j]
        sum2+=a[j][i]
    if sum1 > largest:      #행의 최대 값이 largest에 저장
        largest=sum1
    if sum2 > largest:      #열의 최대 값이 largest에 저장
        largest=sum2
#대각선의 최대 값 찾기 
 
sum1 = sum2 = 0
for i in range(n):
    sum1 += a[i][i]         #왼쪽 대각선
    sum2 += a[i][n-i-1]
    if sum1 > largest:      #행의 최대 값이 largest에 저장
        largest=sum1
    if sum2 > largest:      #열의 최대 값이 largest에 저장
        largest=sum2
print(largest)
 
cs
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_6_격자판 최대합