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 = [[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]]
print(arr)
n = 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")
n = int(input())
a = [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차원 리스트 탐색 )_8_곳감(모래시계) (0) | 2021.08.09 |
---|---|
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_7_사과나무(다이아몬드) (0) | 2021.08.06 |
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_4_두 리스트 합치기 (0) | 2021.08.02 |
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_3_카드 역배치 (0) | 2021.08.01 |
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_2_숫자만 추출 (0) | 2021.07.29 |
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_6_격자판 최대합