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}')
'Algorithm 풀이 > SW Expert Academy' 카테고리의 다른 글
[SWEA] 1954. 달팽이 숫자_python (0) | 2022.08.26 |
---|---|
[SWEA] 1206. View_python (0) | 2022.08.26 |
[SWEA] 1208. Flatten_python (0) | 2022.08.26 |
[SWEA] 1970. 쉬운 거스름돈_python (0) | 2022.08.26 |
[SWEA] 1974. 스도쿠검증_python (0) | 2022.08.26 |