Save my data

[백준 2738] 행렬 덧셈 본문

알고리즘/백준

[백준 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 로 배열 인덱싱 하는 과정에서 나머지 연산자 같은걸 쓰면서 길이좀 줄이고 가독성 좀 좋게 하고 싶었는데 그새 뇌가 굳었는지 방법이 잘 생각이 안났다...

Comments