[프로그래머스] Lv1. 행렬의 덧셈
문제
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.
나의 풀이:
import numpy as np
def solution(arr1, arr2):
a1 = np.array(arr1)
a2 = np.array(arr2)
a = a1 + a2
return a.tolist()
넘파이를 사용한다면 위와 같이 풀 수 있을 것이다. 하지만 이 문제가 원하는 것은 넘파이를 사용하는 것이 아닌 것 같으므로 다른 방식으로 문제를 풀어본다.
# 1차 시도
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
temp = []
for j in range(len(arr1[i])):
temp.append(arr1[i][j]+arr2[i][j])
answer.append(temp)
return answer
# 2차 시도
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
temp = [arr1[i][j] + arr2[i][j] for j in range(len(arr1[i]))]
answer.append(temp)
return answer
코드를 조금 더 간단하게 만들어보려 하기는 했으나 가독성이 너무 떨어진다. 왜 넘파이를 사용하는 것이 효율적인지를 알려주는 문제… 다른 사람들은 어떻게 풀었을까?
다른 사람들의 풀이:
def solution(arr1,arr2):
n = len(arr1)
m = len(arr1[0])
answer = [[arr1[i][j] + arr2[i][j] for j in range(m)] for i in range(n)]
return answer
나의 두번째 풀이와 방식은 같지만 훨씬 더 깔끔하게 코드가 정리되었다.
하지만 zip() 을 사용하면 이것 보다도 더 깔끔하게 코드 작성이 가능하다
def solution(arr1, arr2):
answer = [[c + d for c, d in zip(a, b)] for a, b in zip(arr1, arr2)]
return answer
댓글남기기