N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가 장 큰 합을 출력.
첫 줄에 N 주어지고 두번째 줄부터 N개의 행이 주어짐
입력 예시)
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
출력 예시)
155
내가 쓴 코드1
import sys
sys.stdin = open("input.txt",'rt')
N = int(input())
grid = []
for _ in range(N):
grid.append(list(map(int, input().split())))
max = 0
tmp = 0
#행의 합 계산
for i in range(N):
tmp = sum(grid[i])
if tmp > max:
max = tmp
#열의 합 계산
for i in range(N):
tmp = 0
for j in range(N):
tmp += grid[i][j]
if tmp > max:
max = tmp
#두 대각선 합 계산
tmp = 0
for i in range(N):
tmp += grid[i][i]
if tmp > max:
max = tmp
tmp = 0
for i in range(N):
tmp += grid[i][N-1-i]
if tmp > max:
max = tmp
print(max)
내가 쓴 코드2
import sys
sys.stdin = open("input.txt",'rt')
N = int(input())
grid = []
for _ in range(N):
grid.append(list(map(int, input().split())))
largest = 0
diagSum1 = 0
diagSum2 = 0
for i in range(N):
rowSum = 0
colSum = 0
for j in range(N):
rowSum += grid[i][j]
colSum += grid[j][i]
diagSum1 += grid[i][i]
diagSum2 += grid[i][N - 1 - i]
# if rowSum > largest:
# largest = rowSum
# if colSum > largest:
# largest = colSum
# if diagSum1 > largest:
# largest = diagSum1
# if diagSum2 > largest:
# largest = diagSum2
lst = [rowSum, colSum, diagSum1, diagSum2]
if max(lst) > largest:
largest = max(lst)
print(largest)
모범 답안
import sys
sys.stdin = open('input.txt', 'rt')
n = int(input())
a=[list(map(int, input().split())) for _ in range(n)]
# for x in a:
# print(x)
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-1-i]
if sum1 > largest:
largest = sum1
if sum2 > largest:
largest = sum2
print(largest)
모범답안 보고 느낀점
1. a = [list(map(int, input().split())) for _ in range(n)]를 통해
한 줄로 2차원 격자판 생성 가능
2. 각 행을 반복문 돌며 프린트 하는 방법을 통해 쉽게 2차원으로 확인할 수 있음
3. 자연수니까 굳이 그럴필욘 없지만.. 가장 작은 값을 초기화할때 -2147000000 이용하자
4. 귀찮아서 대충 하지말고 변수명 정할때 변수명 규칙 항상 생각하자~
5. 최대한 복잡도를 낮추려고 생각해보자. 특히 시간복잡도에 집중!!. 반복문을 여러번 도는것보다
한번 돌면서 많은걸 하는게 좋겠지
6. 2번째는 잘 했는데 모범답안에서 대각선 합은 따로 빼서 다시 돌면서 구하는게 더 맞는걸까?
굳이 다시 써보지는 않겠다!!!
'알고리즘 설계 > 내가 보려고 정리하는 문풀' 카테고리의 다른 글
곶감(모래시계) (2) | 2024.10.19 |
---|---|
사과나무(다이아몬드) (1) | 2024.10.18 |
수들의 합 (3) | 2024.10.16 |
두 리스트 합치기 (4) | 2024.10.01 |
카드 역배치 (0) | 2024.10.01 |