알고리즘 & SQL/백준
[백준 2738] 행렬 덧셈
양을 좋아하는 문씨
2024. 4. 22. 19:16
https://www.acmicpc.net/problem/2738
2738번: 행렬 덧셈
첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같
www.acmicpc.net
예전에 풀었던 문제인데 그 때는 단순하게 풀었다.
두 행렬이라고 정해줬으니까 두 번에 나눠서 배열을 만들고, 각각의 원소를 돌면서 각 위치마다 더한 값을 출력하는 식으로 풀었음.
import sys
n, m = map(int, sys.stdin.readline().split())
a = []
b = []
for _ in range(n):
a.append([*map(int, sys.stdin.readline().split())])
for _ in range(n):
b.append([*map(int, sys.stdin.readline().split())])
for i in range(n):
for j in range(m):
print(a[i][j] + b[i][j], end=' ')
print()
이번에는 다르게 풀고 싶었다.
따라서 그 때는 활용하지 않았던 zip을 활용해서 풀어보았다.
import sys
N, M = map(int, sys.stdin.readline().split())
# 결과값을 계산할 행렬을 미리 만들기
res = [[0 for _ in range(M)] for _ in range(N)]
# 두 번 반복
for _ in range(2):
# 각 행렬이 가지는 N개의 행에 대한 연산
for i in range(N):
res[N - 1 - (N - 1 - i)] = [x + y for x, y in zip(res[N - 1 - (N - 1 - i)], [*map(int, sys.stdin.readline().split())])]
# zip 함수와 인덱스를 통해 result 행렬에 매번 누적시켰다.
for i in res:
# 풀어서 출력하기
print(*i)
사실 중간에 N - 1 로 배열 인덱싱 하는 과정에서 나머지 연산자 같은걸 쓰면서 길이좀 줄이고 가독성 좀 좋게 하고 싶었는데 그새 뇌가 굳었는지 방법이 잘 생각이 안났다...