100X100의 2차원 배열이 주어질 때, 각 행의 합, 각 열의 합, 각 대각선의 합 중 최댓값을 구하는 문제.
T = 10 # 테스트 케이스의 개수 T
for n in range(1, T+1):
n = int(input()) # 현 테스트케이스의 번호
matrix = [] # 빈 배열
max_num = 0
x = transformX = 0 # 대각선 구하기
for i in range(100):
matrix.append(list(map(int, input().split()))) # 배열에 값 저장
transform_matrix = list(zip(*matrix)) # 전치 행렬
for i in range(100):
max_num = max(sum(matrix[i]), sum(transform_matrix[i]), max_num) # max_num 찾기
x += matrix[i][i] # 대각선
transformX += matrix[i][99-i] # 역 대각선
max_num = max(x, transformX, max_num) # 구한 최대값과 대각선 값을 비교
print("#%d %d" %(n, max_num))
[문제풀이]

주어진 배열의 각 행의 합, 열의 합, 대각선의 합을 구해 그 값 중 가장 큰 값을 구하는 문제다.
이 문제의 핵심은 각 행의 합, 대각선의 합이다.
열의 합은 반복문에 sum 함수를 사용해서 쉽게 구할 수 있다.
transform_matrix = list(zip(*matrix)) # 전치 행렬
행의 합은 이렇게 전치 행렬을 만들어서 배열을 뒤집어 주고, 그 뒤집힌 배열을 열의 합 구하는 것처럼 반복문에 sum 함수를 이용해서 구해줬다.
x += matrix[i][i] # 대각선
transformX += matrix[i][99-i] # 역 대각선
대각선의 합은 (i, i).
그리고 역 대각선은 (i, 99-i) 번째의 값을 누적해서 더하는 값으로 구하고, 마지막으로 구한 값을 비교해서 최대값을 구했다.
'코딩테스트 > SWEA' 카테고리의 다른 글
| [Python, 파이썬] SWEA 1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 (0) | 2024.10.15 |
|---|---|
| [Python, 파이썬] SWEA 2001. 파리 퇴치 (0) | 2024.10.15 |
| [Python, 파이썬] SWEA 1926. 간단한 369게임 (1) | 2024.10.15 |
| [Python, 파이썬] SWEA 1208. [S/W 문제해결 기본] 1일차 - Flatten (0) | 2024.10.15 |
| [Python, 파이썬] SWEA 1954. 달팽이 숫자 (1) | 2024.10.15 |