본문 바로가기

Algorithms and Languages/파이썬 알고리즘 문제풀이

[Python/백준] 2738. 행렬 덧셈

문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.

문제 유형 보기

더보기
더보기
이차원 리스트

https://www.acmicpc.net/problem/2738

 

입력 : 두 행렬 A, B의 크기 NxM
출력 : 두 행렬을 원소합한 결과

# 입력
3 3
1 1 1
2 2 2
0 1 0
3 3 3
4 4 4
5 5 100

# 출력
4 4 4
6 6 6
5 6 100

 


직관 및 접근

matrix를 위 출력처럼 출력하려면, 언패킹을 사용하는 게 가장 파이써닉하다.

matrix = [
	[4, 4, 4],
	[6, 6, 6],
	[5, 6, 100],
]
# 언패킹을 활용하여 출력
for line in matrix:
    print(*line)
'''
4 4 4
6 6 6
5 6 100
'''

풀이 1 - 두 행렬을 원소합한 새로운 행렬을 생성, 리스트 컴프리헨션

# https://www.acmicpc.net/problem/2738
# 백준 2738번: 행렬 덧셈
# 풀이 1
import sys
input = sys.stdin.readline

# 입력 : 행렬의 크기 NxM
# 그리고 행렬의 원소들
# 출력 : 두 행렬을 합한 결과 행렬

N, M = map(int, input().split())
matrix_A = [list(map(int, input().split())) for _ in range(N)]
matrix_B = [list(map(int, input().split())) for _ in range(N)]

# matrix_sum = []
# for i in range(N):
#     line = []
#     for j in range(M):
#         line.append(matrix_A[i][j] + matrix_B[i][j])
#     matrix_sum.append(line)
    
# 리스트 컴프리헨션을 사용하여 행렬 합 계산
matrix_sum = [[matrix_A[i][j] + matrix_B[i][j] for j in range(M)] for i in range(N)]

for line in range(N):
    print(*matrix_sum[line])

 

풀이 2 - 더 효율적, 행렬 A에 값을 더해나가기, 언패킹

# https://www.acmicpc.net/problem/2738
# 백준 2738번: 행렬 덧셈
# 풀이 2 - 더 효율적
import sys
input = sys.stdin.readline

# 입력 : 행렬의 크기 NxM
# 그리고 행렬의 원소들
# 출력 : 두 행렬을 합한 결과 행렬

N, M = map(int, input().split())
matrix_A = [list(map(int, input().split())) for _ in range(N)]
matrix_B = [list(map(int, input().split())) for _ in range(N)]

for i in range(N):
    for j in range(M):
        matrix_A[i][j] += matrix_B[i][j]

# 언패킹을 활용하여 출력
for line in matrix_A:
    print(*line)