본문 바로가기

코딩테스트/SWEA

[Python, 파이썬] SWEA 1209. [S/W 문제해결 기본] 2일차 - Sum

 

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) 번째의 값을 누적해서 더하는 값으로 구하고, 마지막으로 구한 값을 비교해서 최대값을 구했다.