자료구조와 알고리즘/개인적인 코딩테스트 관련 풀이

[탐색][시뮬레이션] - 격자판 최대합(2차원 List)

얄루몬 2022. 7. 6. 18:20

문제

주어진 N X N 리스트에서 행, 렬, 두 개의 대각선의 합 중에 가장 큰 값을 출력하라

문제풀이

import sys
#sys.stdin = open("input.txt", "r")
#격자판 최대합

n = int(input())
a = [list(map(int,input().split())) for _ in range(n)]
sum1 = sum2 = sum3 = sum4 = 0
largest = -2147000000

# 행, 렬의 최대합
for i in range(n):
    #0,0 ~ 0,n까지 확인이 끝나면 sum1, sum2 다시 초기화
    sum1 = sum2 = 0

    for j in range(n):
        sum1 += a[i][j]
        sum2 += a[j][i]

    #매번 행 확인이 끝날 때 max값을 확인하기 위함
    if largest < sum1:
        largest = sum1
    if largest < sum2:
        largest = sum2

#대각선 확인을 위한 기초
sum1 = sum2 = 0
for i in range(n):

    sum1 += a[i][i]
    sum2 += a[i][n-i-1]

    if largest < sum1:
        largest = sum1
    if largest < sum2:
        largest = sum2

    
print(largest)
  • 해당 sum 변수 초기화와 largest 비교 시점이 중요한 문제이다.
  • 대각선의 경우 i씩 증가하거나 i, n-1-i만큼 증가하기에 이 부분을 찾으면 문제 풀이는 어렵지 않다.

대각선 1
대각선 2