Algorithm 풀이/SW Expert Academy

[SWEA] 1209. Sum_python

yeguu 2022. 8. 26. 01:54

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13_BWKACUCFAYh 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

* 문제의 저작권은 SW Expert Academy에 있습니다.


1. 문제

다음 100X100의 2차원 배열이 주어질 때, 각 행의 합, 각 열의 합, 각 대각선의 합 중 최댓값을 구하는 프로그램을 작성하여라.

다음과 같은 5X5 배열에서 최댓값은 29이다.


[제약 사항]

총 10개의 테스트 케이스가 주어진다.

배열의 크기는 100X100으로 동일하다.

각 행의 합은 integer 범위를 넘어가지 않는다.

동일한 최댓값이 있을 경우, 하나의 값만 출력한다.
 
[입력]

각 테스트 케이스의 첫 줄에는 테스트 케이스 번호가 주어지고 그 다음 줄부터는 2차원 배열의 각 행 값이 주어진다.

[출력]

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.

 

 

 

2. 내 풀이

for _ in range(10):
    tc = input()
    arr = [list(map(int, input().split())) for _ in range(100)]
    max_sum = 0

    # 1) 행과 대각선의 합
    degak = 0       # 왼 -> 오 대각선
    bandegak = 0    # 오 -> 왼 대각선
    for i in range(100):
        if sum(arr[i]) > max_sum:  # 행의 합
            max_sum = sum(arr[i])
        degak += arr[i][i]         # 대각선의 합
        bandegak += arr[i][-1 - i]
    if degak > max_sum:
        max_sum = degak
    elif bandegak > max_sum:
        max_sum = bandegak

    # 2) 열의 합
    for j in range(100):
        sero = 0
        for i in range(100):
            sero += arr[i][j]
        if sero > max_sum:
            max_sum = sero

    print(f'#{tc} {max_sum}')

-> 번거롭게 코드를 작성한 것 같다.

다른 분들 코드를 보면서 배우는 점이 많다.

 

 

 

3. 다른 풀이

for _ in range(1, 11):
    n = int(input())
    nums = [list(map(int, input().split())) for _ in range(100)]
    total_list = []
    result = 0
    for i in range(100):
        x_total, y_total, z_total = 0, 0, 0
        for j in range(100):
            x_total += nums[i][j]   # 행의 합 계산
            y_total += nums[j][i]   # 열의 합 계산
            z_total += nums[j][j]   # 대각선 합 계산
        total_list.append(x_total)
        total_list.append(y_total)
        total_list.append(z_total)

    for k in total_list:
        if result < k:
            result = k

    print(f'#{n} {result}')