[SWEA][D3][#01209] Sum

작성:    

업데이트:

카테고리:

태그: , ,

출처

학습용 포스트입니다. 본 포스트가 문제가 될 시 수정 또는 삭제하겠습니다.


문제

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


제약사항

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

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

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

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


입력

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


출력

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


예제

입력

1
13 24 13 24 1 7 24 11 22 18 22 16 24 8 15 28 9 24 14 14 28 18 17 9 3 29 22 12 28 2 25 6 11 26 14 19 3 26 13 6 23 3 3 29 13 25 4 27 8 25 28 8 9 17 28 13 24 27 9 25 21 20 6 16 28 5 22 11 9 29 13 26 28 2 11 10 14 14 5 11 26 9 15 3 23 9 8 11 12 6 9 18 6 14 28 21 24 24 20 12
20 28 29 21 27 13 29 16 6 28 5 7 13 20 7 1 11 1 23 12 4 9 27 19 26 2 21 2 1 18 4 20 6 4 18 9 20 3 28 28 1 21 1 2 11 7 20 15 7 29 14 7 15 10 29 24 2 25 29 3 11 9 17 6 2 17 17 11 7 20 26 10 8 1 15 10 2 29 7 9 17 8 25 28 29 12 28 19 3 4 17 17 28 9 2 15 14 6 20 3
13 19 28 23 11 1 19 5 5 28 19 18 16 14 26 20 6 12 20 18 16 22 25 21 25 29 3 ............
........
........


출력

#1 1712
#2 1743
.......
.......


My Sol

N = 100
for _ in range(1, 11):
    tc = int(input())
    mat = [list(map(int, input().split())) for _ in range(N)]
    max_v = 0
    # 행 우선 탐색
    for i in range(N):
        sum_v = 0
        for j in range(N):
            sum_v += mat[i][j]

        if max_v < sum_v:
            max_v = sum_v

    # 열 우선 탐색
    for j in range(N):
        sum_v = 0
        for i in range(N):
            sum_v += mat[i][j]

        if max_v < sum_v:
            max_v = sum_v

    sum_v = 0
    for i in range(N):
        sum_v += mat[i][i]

    if max_v < sum_v:
        max_v = sum_v

    sum_v = 0
    for i in range(N):
        sum_v += mat[i][N-1-i]

    if max_v < sum_v:
        max_v = sum_v

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

행 우선 탐색, 열 우선 탐색, 대각선에 대한 탐색을 잘 이해하고 있는지 확인하는 문제였다. 최댓값을 구해야하는데, 모든 탐색에서 최댓값의 갱신이 있으므로, 코드의 반복을 지양하고 싶다면 함수로 구현해야 한다.

하지만 문제가 되는 if문은 대단히 짧고, 매 반복마다 호출해야 하기 때문에 함수로 분리하는 것은 그닥 메리트가 되지 않는다는 판단이 섰다.

행을 우선 탐색하는 경우 외부 for문은 행 index, 내부 for문은 열 index로 반복을 진행한다. 반면 열을 우선 탐색하는 경우 외부 for문은 열 index, 내부 for문은 행 index로 반복을 진행한다.

대각선은 idx가 같거나, 한 idx가 0이라면 다른 idx는 99, 즉 두 idx의 합이 99여야 하므로 이에 맞춘 mat[i][N-1-i]로 반복을 진행하였다.


결과

PASS

댓글남기기