[문제]
다음 100X100의 2차원 배열이 주어질 때, 각 행의 합, 각 열의 합, 각 대각선의 합 중 최댓값을 구하는 프로그램을 작성하여라.
다음과 같은 5X5 배열에서 최댓값은 29이다.
[제약 사항]
총 10개의 테스트 케이스가 주어진다.
배열의 크기는 100X100으로 동일하다.
각 행의 합은 integer 범위를 넘어가지 않는다.
동일한 최댓값이 있을 경우, 하나의 값만 출력한다.
[입력]
각 테스트 케이스의 첫 줄에는 테스트 케이스 번호가 주어지고 그 다음 줄부터는 2차원 배열의 각 행 값이 주어진다.
[출력]
#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.
[풀이]
단순한 구현 문제로, 규칙을 찾는다면 어렵지 않은 문제였다. 행, 열, 대각선 합 리스트를 각각 구한 후 max 함수로 값을 비교해주면 된다.
사실 행을 구할 때 더 간단한 방법이 있을 것 같아 고민하다가 결국 모든 값들을 다 돌면서 더하는 방식으로 작성했다.
[정답 코드]
import sys
sys.stdin = open("input_1209.txt", "r")
T = 10
for test_case in range(1, T + 1):
t = int(input())
arr = [list(map(int, input().split())) for _ in range(100)]
temp_c1 = 0
temp_c2 = 0
temp_r = [sum(arr[i]) for i in range(100)] # 각 열 합 리스트
max_r = max(temp_r) # 열의 최댓값
for i in range(100): # 대각선
temp_c1 += arr[i][i] # 좌측에서 시작하는 대각선
temp_c2 += arr[99-i][i] # 우측에서 시작하는 대각선
max_c = max(temp_c1, temp_c2) # 대각선의 최댓값
temp_col = [0]*100
for i in range(100):
for j in range(100):
temp_col[i] += arr[j][i]
max_col = max(temp_col) # 행의 최댓값
print(f'#{t} {max(max_r, max_col, max_c)}')
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA] 1208: Flatten (Python) (0) | 2023.11.08 |
---|