문제 링크
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13_BWKACUCFAYh
문제
다음 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
.......
.......
정답 및 풀이
for tc in range(10):
case = int(input())
arr = [list(map(int, input().split())) for _ in range(100)]
r_sum = []
c_sum = []
cross = []
for i in range(100):
r_sum.append(sum(arr[i][:]))
for i in range(100):
cnt = 0
for j in range(100):
cnt += arr[j][i]
c_sum.append(cnt)
cross_cnt = 0
for i in range(100):
cross_cnt += arr[i][i]
cross.append(cross_cnt)
reverse_cross_cnt = 0
for i in range(99, -1, -1):
reverse_cross_cnt += arr[i][99-i]
cross.append(reverse_cross_cnt)
result = [max(r_sum), max(c_sum), max(cross)]
print(f'#{tc + 1} {max(result)}')
- for tc in range(10):
- 10개의 테스트 케이스를 순서대로 처리한다.
- case = int(input())
- 테스트 케이스 번호를 입력받아 버퍼를 맞춘다.
- arr = [list(map(int, input().split())) for _ in range(100)]
- 100×100 크기의 배열을 한 줄씩 입력받아 2차원 리스트로 저장한다.
- r_sum = []
- 각 행의 합을 저장할 리스트를 만든다.
- c_sum = []
- 각 열의 합을 저장할 리스트를 만든다.
- cross = []
- 두 종류의 대각선 합(정방향, 역방향)을 저장할 리스트다.
- for i in range(100): r_sum.append(sum(arr[i]))
- i번째 행의 모든 원소를 더해 r_sum 리스트에 추가한다.
- for i in range(100):
- i번째 열의 합을 계산하기 위한 반복문을 시작한다.
- cnt = 0
- 현재 열의 합을 계산해 저장할 변수를 초기화한다.
- for j in range(100): cnt += arr[j][i]
- 모든 행을 순회하며 arr[j][i] 값을 더해 i번째 열의 총합을 만든다.
- c_sum.append(cnt)
- 계산된 i번째 열 합을 c_sum 리스트에 저장한다.
- cross_cnt = 0
- 정대각선(왼쪽 위 → 오른쪽 아래)의 합을 저장할 변수를 초기화한다.
- for i in range(100): cross_cnt += arr[i][i]
- arr[i][i] 값을 순차적으로 더해 정대각선의 총합을 구한다.
- cross.append(cross_cnt)
- 정대각선의 합을 cross 리스트에 저장한다.
- reverse_cross_cnt = 0
- 역대각선(오른쪽 위 → 왼쪽 아래)의 합을 저장하기 위한 변수를 초기화한다.
- for i in range(100): reverse_cross_cnt += arr[i][99 - i]
- arr[i][99 - i] 값을 모두 더해 역대각선의 총합을 만든다.
- cross.append(reverse_cross_cnt)
- 역대각선의 합을 cross 리스트에 저장한다.
- result = [max(r_sum), max(c_sum), max(cross)]
- 행 최대합, 열 최대합, 대각선 최대합을 리스트에 모아 비교할 준비를 한다.
- print(f'#{tc + 1} {max(result)}')
- result 리스트에서 가장 큰 값을 골라 해당 테스트 케이스의 정답으로 출력한다.
'SWEA' 카테고리의 다른 글
| [SWEA] 1240 : [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 (Python/파이썬) (0) | 2025.11.24 |
|---|---|
| [SWEA] 2805 : 농작물 수확하기 (Python/파이썬) (0) | 2025.11.24 |
| [SWEA] 1244 : [S/W 문제해결 응용] 2일차 - 최대 상금 (Python/파이썬) (0) | 2025.11.24 |
| [SWEA] 1208 : [S/W 문제해결 기본] 1일차 - Flatten (Python/파이썬) (0) | 2025.11.24 |
| [SWEA] 1206 : [S/W 문제해결 기본] 1일차 - View (Python/파이썬) (0) | 2025.11.24 |