https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13_BWKACUCFAYh
다음 100X100의 2차원 배열이 주어질 때, 각 행의 합, 각 열의 합, 각 대각선의 합 중 최댓값을 구하는 프로그램을 작성하여라.
다음과 같은 5X5 배열에서 최댓값은 29이다.
[제약 사항]
총 10개의 테스트 케이스가 주어진다.
배열의 크기는 100X100으로 동일하다.
각 행의 합은 integer 범위를 넘어가지 않는다.
동일한 최댓값이 있을 경우, 하나의 값만 출력한다.
[입력]
각 테스트 케이스의 첫 줄에는 테스트 케이스 번호가 주어지고 그 다음 줄부터는 2차원 배열의 각 행 값이 주어진다.
[출력]
#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.
# 각 열의 합은 전치행렬로 만든 후에 구하기
# 대각선 또한 행렬의 대각선과 전치행렬의 대각선으로 구하면 됨
for i in range(1, 11):
_ = input()
nums = [list(map(int, input().split())) for _ in range(100)] #배열입력
# 각 행의 합 중 최대값
row_max = 0
for row in nums:
row_sum = sum(row) #행 합
if row_sum > row_max: row_max = row_sum
# 각 열의 합 중 최대값
col_max = 0
for col in zip(*nums):
col_sum = sum(col) #열 합
if col_sum > col_max: col_max = col_sum
# 오른쪽 아래 대각선
d1_sum = sum([nums[j][j] for j in range(100)])
# 왼쪽 아래 대각선
d2_sum = sum([nums[j][99-j] for j in range(100)])
print(f"#{i} {max(row_max, col_max, d1_sum, d2_sum)}")
for test_case in range(1,11):
tc=int(input())
lst=[list(map(int,input().split())) for _ in range(100)]
ans=v3=v4=0
for i in range(100):
v1=v2=0
for j in range(100):
v1+=lst[i][j] # 행 합
v2+=lst[j][i] # 열 합
ans=max(ans,v1,v2)
v3+=lst[i][i] # 오른쪽 아래 대각선 합
v4+=lst[i][100-1-i] # 왼쪽 아래 대각선 합
ans=max(ans,v3,v4)
print("#%d %d"%(test_case,ans))
엄청 짧고 빨리 하신 분이 있길래 포인트 써서 봤는데 무척 간결하고 가독성도 좋다
나는 행 최대값 계산하고, 열 최대값 계산하고, 대각선 합 계산 두번해서 일일이 다 찾아보는 짓을 선택했는데
이분은 딱 배열을 한 번 탐색해서 모든 값을 다 구했다
wow 👏👏👏👍