-
section3.6 수들의 합알고리즘 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'알고리즘' 카테고리의 다른 글
section3.8 곳감(모래시계) (0) 2022.10.30 section3.7 사과나무(다이아몬드) (0) 2022.10.27 section3.5 수들의 합 (0) 2022.10.26 section3.4 두 리스트 합치기 (0) 2022.10.26 section3.3 카드 역배치 (1) 2022.10.26