[프로그래머스][PYTHON] Lv. 1 행렬의 덧셈
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/12950
'행렬'이라는 단어를 보자마자, numpy가 생각났다.
분명 문제에서 원하는 풀이는 아닐 것 같지만, numpy를 이용하면 행렬 연산을 쉽게 구할 수 있기 때문이다!
첫 번째 풀이
import numpy as np
def solution(arr1, arr2):
# numpy 배열로 변환 후 계산
a1 = np.array(arr1)
a2 = np.array(arr2)
return (a1 + a2).tolist()
numpy는 파이썬에서 수학적 계산을 위한 핵심 라이브러리이며,
특히 다차원 데이터를 효율적으로 처리할 수 있는 기능을 제공한다.
먼저, import를 이용해 numpy 라이브러리를 불러온다.
이 후, 주어진 2개의 행렬(arr1, arr2)를 각각 numpy 배열로 바꾸고,
이들의 덧셈을 수행한다.
numpy 배열을 사용했기 때문에 단순히 + 연산자를 통해 원하는 행렬 계산 결과를 뽑아낼 수 있다.
참고로, numpy 배열을 이용한 행렬 덧셈 결과는 아래와 같으며,
# arr1 = [[1, 2], [2, 3]]
# arr2 = [[3, 4], [5, 6]]
a1 = np.array(arr1)
a2 = np.array(arr2)
print(a1 + a2)
numpy 배열을 이용하지 않은 행렬 덧셈 결과는 아래와 같다.
# arr1 = [[1, 2], [2, 3]]
# arr2 = [[3, 4], [5, 6]]
print(arr1 + arr2)
이후, 문제에서 원하는 형식으로 바꾸기 위해 tolist() 함수를 사용해 본래의 타입으로 변경한다.
두 번째 풀이
아래는 numpy를 사용하지 않은 풀이이다.
def solution(arr1, arr2):
answer = []
for i, j in zip(arr1, arr2):
tmp = []
for x in range(len(i)):
tmp.append(i[x] + j[x])
answer.append(tmp)
return answer
zip 함수를 사용해, 각 행렬의 동일한 인덱스를 얻어낸다.
즉, 첫 번째 입출력 예시에 대해 확인해보면,
i에는 [1, 2], j에는 [3, 4]가 가장 먼저 담기게 된다.
이를 순회하며,
1+3를 하여 임시배열(tmp)에 추가하고,
2+4를 하여 임시배열(tmp)에 추가한다.
각 원소에 대해 덧셈을 수행한 후,
구해진 임시 배열을 정답 배열(answer)에 추가한다!
다른 사람 풀이
def solution(arr1, arr2):
for i in range(len(arr1)):
for j in range(len(arr1[0])):
arr1[i][j] += arr2[i][j]
return arr1
def solution(arr1, arr2):
answer = [[c + d for c, d in zip(a,b)] for a, b in zip(arr1, arr2)]
return answer