알고리즘/SWEA

[SWEA] 1209: Sum (Python)

김호록님 2023. 11. 8. 01:34

[문제]

다음 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