알고리즘/인프런: 파이썬 알고리즘 문제풀이

탐색&시뮬레이션 문제 #6. 격자판 최대합

bearbrick 2022. 5. 28. 02:12

*이 풀이는 인프런: 파이썬 알고리즘 문제풀이 강좌에 기반하였습니다.

 

 

 

내 풀이

 

1. 2차원 배열을 입력받는다.

2. 각 행의 합을 구해서 행의 합들 중에서 최대값을 구한다.

3. 각 열의 합을 구해서 대소비교해줌으로써 최대값을 구한다.

4. 두 대각선의 합을 구해서 대소비교해줌으로써 최종 최대값을 구한다.

 

import sys
#sys.stdin=open("input.txt","rt")

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

max=0
for i in range(n):
    sum=0
    for j in range(n):
        sum+=arr[i][j]
    if max < sum:
        max=sum

for i in range(n):
    sum=0
    for j in range(n):
        sum+=arr[j][i]
    if max < sum:
        max=sum

sum=0
for i in range(n):
    sum+=arr[i][i]
    if max < sum:
        max=sum

sum=0
for i in range(n):
    sum+=arr[i][n-i-1]
    if max < sum:
        max=sum

print(max)

 

 

 

강사님 풀이

 

import sys
sys.stdin=open("input.txt","rt")

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

largest=-2147000000 #max라는 함수가 있어서 변수 이름으로 max 자제

for i in range(n):
    sum1=sum2=0 #sum1: 행의 합, sum2: 열의 합
    for j in range(n):
        sum1+=a[i][j]
        sum2+=a[j][i]
    if sum1>largest:
        largest=sum1
    if sum2>largest:
        largest=sum2

sum1=sum2=0 #sum1, sum2: 두 대각선의 합
for i in range(n):
    sum1+=a[i][i]
    sum2+=a[i][n-i-1]

if sum1>largest:
    largest=sum1
if sum2>largest:
    largest=sum2

print(largest)

 

 

 

배운 점

 

1. 2차원 배열 입력받기: arr = [ list( map( int, input( ).split( ) ) ) for _ in range( n ) ]

1차원 배열을 입력받는데 이를 n번 반복해서 입력 받은 후, 배열에 저장해서 2차원 배열을 만든다.

 

2. 중복되는 코드가 있다면, 코드를 줄이기 위해서 합치자.