[프로그래머스] Lv1. 행렬의 덧셈

1 분 소요

문제

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 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

댓글남기기