[프로그래머스] 행렬의 덧셈 (Python)

TK·2023년 11월 14일

문제 설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

입출력 예

arr1arr2return
[[1,2],[2,3]][[3,4],[5,6]][[4,6],[7,9]]
[[1],[2]][[3],[4]][[4],[6]]

내가 푼 답 (numpy)

import numpy as np
def solution(arr1, arr2):
    a1= np.array(arr1)
    a2= np.array(arr2)
    return (a1 + a2).tolist()
  • 속도가 안습이다.

tolist()

  • np.array()로 행렬을 만드는 방법에 대해서는 정말 많은 포스팅이 있었으나 행렬을 다시 이차원배열로 만드는 방법은 아무리 검색해도 나오지 않았다. (내 검색방법이 잘못 됐을수도,,,) 그런데 챗GPT가 아주 속시원히 해결해 주었다♥

정답 풀이1 (zip)

def solution(arr1, arr2):
    answer = [[c + d for c, d in zip(a,b)] for a, b in zip(arr1,arr2)]
    return answer

zip은 두 개의 리스트를 서로 묶어줄 때 사용합니다.

name = ['merona', 'gugucon']
price = [500, 1000]
z = zip(name, price)
print(list(z))

아래와 같이 나타납니다.

[('merona', 500), ('gugucon', 1000)]

정답 풀이2 (zip)

  • * 튜플 언팩킹(unpacking)을 활용해서, x라는 변수를 한개만 이용해서 두개의 튜플을 받아들여 처리하는 방식
def solution(arr1, arr2):
    return [list(map(sum, zip(*x))) for x in zip(arr1, arr2)]

정답 풀이3 (이중for문)

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

profile
쉬운게 좋은 FE개발자😺

0개의 댓글