알고리즘/인프런: 파이썬 알고리즘 문제풀이
탐색&시뮬레이션 문제 #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. 중복되는 코드가 있다면, 코드를 줄이기 위해서 합치자.