문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.
문제 유형 보기
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)
'Algorithms and Languages > 파이썬 알고리즘 문제풀이' 카테고리의 다른 글
[Python/DailyAlgo] 70. 이차원 배열의 회전 (0) | 2025.02.05 |
---|---|
[Python/DailyAlgo] 69. 이차원 배열에서 특정 구간 행순회 (0) | 2025.02.05 |
[Python/DailyAlgo] 79. 배열 정렬 (0) | 2025.02.04 |
[Python/프로그래머스] 121683. 외톨이 알파벳 (0) | 2025.02.04 |
[Python/프로그래머스] 42578. 의상 (0) | 2025.02.04 |