알고리즘

section3.6 수들의 합

gitofjy 2022. 10. 27. 22:09

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의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가 장 큰 합을 출력합 니다. 

 

 

import sys
sys.stdin = open("input.txt", "rt")
n = int(input())
arr = []
for i in range(n):
    arr.append(list(map(int, input().split())))

def sumHorizon(n):
    sum = 0
    maxSum = 0

    for i in range(n):
        for j in range(n):
            sum += arr[i][j]
            if (j == n-1):
                if maxSum < sum:
                    maxSum = sum
                    sum = 0
                else:
                    sum = 0
    return maxSum

def sumVertical(n):
    sum = 0
    maxSum = 0
    
    for i in range(n):
        for j in range(n):
            sum += arr[j][i]
            if (j == n-1):
                if maxSum < sum:
                    maxSum = sum
                    sum = 0
                else:
                    sum = 0
    return maxSum

def sumDiagonal(n):
    lsum = 0 
    rsum = 0 
    maxSum = 0
    
    for i in range(n):
        lsum += arr[i][i]
        rsum += arr[i][n-i-1]
    
        if (i == n-1):
                if maxSum < lsum:
                    maxSum = lsum
                    lsum = 0
                elif maxSum < rsum:
                    maxSum = rsum
                    rsum = 0
                else:
                    lsum = 0
                    rsum = 0

    return maxSum

result = max(sumDiagonal(5), sumVertical(5), sumHorizon(5))
print(result)
# print(sumDiagonal(5), sumVertical(5), sumHorizon(5))
# 155 149 154

 

각 합마다 함수를 만들어서 코드를 작성했다

실제 합과 최대를 출력해 보면 답은 맞는데 채점 프로그램에서는 틀린 답으로 나온다...

 

중간에 잠깐 헷갈려서 함수마다 sum, maxSum의 초기화를 안 했다

전역 변수라고 생각해서 코드 처음에 초기화만 해 놨더니 오류가 떴다

마지막에 오류 정리하고 넘어가야겠다

 

답은 내 코드와 비슷하지만 훨씬 짧았다

함수를 사용하지 않고 바로 sum을 비교하는 방식

 

import sys
sys.stdin = open("input.txt", "rt")
n = int(input())
a = [list(map(int, input().split())) for _ in range(n)]
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 = sum1
    if sum2 > 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 = sum1
    if sum2 > largest:
        largest = sum2
print(largest)

 

 

 

 

 

 UnboundLocalError: local variable 'sum' referenced before assignment
> 함수에서 전역 네임스페이스의 변수를 할당할 일이 생기면 전역변수를 할당 시점에 컴파일러가 로컬변수로 간주하기 때문에 발생하는 오류
내 코드에서 할당이란? sum을 이용해 계산하는 것, 따라서 함수 안에서 로컬변수가 없기 때문에 오류가 난 것이다

 

728x90