알고리즘
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을 이용해 계산하는 것, 따라서 함수 안에서 로컬변수가 없기 때문에 오류가 난 것이다
( 참고 : https://sikaleo.tistory.com/99 )
728x90