코딩테스트/SW Expert Academy
[D3] 1209. [S/W 문제해결 기본] 2일차 - Sum
셂
2024. 10. 16. 10:52
1209. [S/W 문제해결 기본] 2일차 - Sum
✏️ 문제 풀이
첫 번째 풀이
- vertical: 세로 합을 저장하기 위한 리스트로, 크기는 100이며 모든 값 0으로 초기화
- 리스트 컴프리헨션으로 100개의 행을 입력받아 100x100 크기의 행렬을 만듦
for tc in range(1, 11):
n = int(input())
result = 0
vertical = [0] * 100
right_diagonal = 0
left_diagonal = 0
# 100x100 행렬 입력 받기
matrix = [list(map(int, input().split())) for _ in range(100)]
for i in range(100):
result = max(result, sum(matrix[i])) # 가로 합
for j in range(100):
vertical[j] += matrix[i][j] # 세로 합
right_diagonal += matrix[i][i] # 오른쪽 대각선
left_diagonal += matrix[i][99-i] # 왼쪽 대각선
result = max(result, max(vertical), right_diagonal, left_diagonal)
print(f"#{n} {result}")
두 번째 풀이
- 전치행렬(transpose matrix): 행렬의 행과 열을 바꾸는 과정
- zip(): 여러 iterable(반복 가능한 객체)을 동시에 순회하여 각 iterable의 동일한 인덱스에 있는 요소들을 묶어 새로운 튜플 생성
- *matrix는 matrix의 각 행을 개별적인 인자로 풀어주는 역할
→ matrix가 2D 리스트이므로, *matrix는 각 행을 개별적으로 zip()에 전달
for tc in range(1, 11):
n = int(input())
result = 0
right_diagonal = 0
left_diagonal = 0
matrix = []
# 100x100 행렬 입력 받기
matrix = [list(map(int, input().split())) for _ in range(100)]
matrix_t = list(zip(*matrix)) # 세로 합을 쉽게 계산하기 위해 행렬 전치
for i in range(100):
right_diagonal += matrix[i][i] # 오른쪽 대각선
left_diagonal += matrix[i][99 - i] # 왼쪽 대각선
result = max(result, sum(matrix[i]), sum(matrix_t[i])) # 가로 및 세로 최대 합 계산
result = max(result, right_diagonal, left_diagonal)
print(f"#{n} {result}")