Search

[SWEA] 1209. [S/W 문제해결 기본] 2일차 - Sum

서론

오늘은 SW Expert Academy에서 제공하는 "1209. [S/W 문제해결 기본] 2일차 - Sum" 문제를 풀어보았습니다. 이 문제는 2차원 배열에서 각 행의 합, 각 열의 합, 각 대각선의 합 중 최댓값을 구하는 것이 목표입니다.

문제 분석

문제의 요구사항은 다음과 같습니다:
100X100 크기의 2차원 배열이 주어집니다.
각 행의 합, 각 열의 합, 각 대각선의 합 중 최댓값을 구해야 합니다.
총 10개의 테스트 케이스가 주어집니다.
배열의 크기는 모든 테스트 케이스에서 동일합니다.
각 행의 합은 integer 범위를 넘어가지 않습니다.
동일한 최댓값이 있을 경우, 하나의 값만 출력합니다.
문제 해결을 위한 핵심 포인트는 각 행, 열, 대각선의 합을 효율적으로 구하는 것입니다.

계획 수립

문제를 해결하기 위해 다음과 같은 접근 방식을 생각해보았습니다:
행, 열 누산 배열을 만들어두고, 각 셀을 돌면서 자신에게 맞는 배열에 누적해주면 될 것 같습니다.
이를 위해 1차원 배열을 사용하여 각 행과 열의 합을 저장하고, 별도의 변수를 사용하여 대각선의 합을 누적하는 방식으로 구현하기로 했습니다.

코드 작성

코드는 다음과 같이 작성하였습니다:
import sys sys.stdin = open("input.txt", "r") T = 10 for test_case in range(1, T + 1): _ = input() Map = [list(map(int, input().split())) for _ in range(100)] row_acc = [0] * 100 col_acc = [0] * 100 cross_acc1 = 0 cross_acc2 = 0 # 전부 돌고, 해당하는 행, 열 누적기에 누적 for i, row in enumerate(Map): for j, cell in enumerate(row): row_acc[i] += cell col_acc[j] += cell if i==j: cross_acc1 += cell if (99-i) == j: cross_acc2 += cell max_value = max(max(row_acc), max(col_acc), cross_acc1, cross_acc2) print("#%d %d" % (test_case, max_value))
Python
복사

주요 코드 설명:

행과 열의 합을 저장할 1차원 배열 row_acccol_acc를 초기화합니다.
대각선의 합을 저장할 변수 cross_acc1cross_acc2를 초기화합니다.
2차원 배열을 순회하면서 각 셀의 값을 해당하는 행, 열, 대각선 누적기에 누적합니다.
최종적으로 max() 함수를 사용하여 행, 열, 대각선 합의 최댓값을 구합니다.

문제 해결 및 보완

코드를 작성한 후, 제공된 테스트 케이스를 통해 검증하였습니다. 다행히 한 번에 통과할 수 있었습니다.

회고

오늘의 문제는 비교적 쉽게 해결할 수 있었습니다. 행과 열, 대각선의 합을 구하는 과정을 누적 배열을 활용하여 효율적으로 처리할 수 있었던 것이 핵심이었던 것 같습니다.
이번 문제를 통해 누적 배열의 활용법에 대해 다시 한번 되새길 수 있었습니다. 앞으로도 이러한 테크닉을 잘 활용하여 문제 해결에 적용해봐야겠습니다.