Programmers Coding Quiz #14 행렬의 덧셈

김기욱·2021년 2월 2일
0

코딩테스트

목록 보기
14/68

문제 설명

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

풀이

def solution(arr1, arr2):
    result = []
    for x, y in zip(arr1, arr2):
        new = [z+k for z,k in zip(x, y)]
        result.append(new)
    return result

배열이 길이가 같은 리스트의 연산에는 zip만한게 없습니다.
이중리스트여도 결국엔 리스트로 한 층 씩파고들어서 연산을 하면 되는 문제입니다. zip으로 순회를 하고 순회를 한 리스트를 다시 한 번더 zip으로 순회한 리스트컴프리헨션을 만들고 이걸 최종 빈 배열에 넣어주는것을 반복하면 문제가 원하는 행렬의 덧셈이 완성됩니다.

def solution(arr1,arr2):
    return [[z + k for z, k in zip(x, y)] for x, y in zip(arr1,arr2)]

이런식으로 한 줄로도 정리가 가능합니다.

다른풀이

import numpy

def solution(arr1, arr2):
    arr1 = numpy.array(arr1)
    arr2 = numpy.array(arr2)
    answer = arr1 + arr2
    return answer.tolist()

행렬의 관한 연산에는 파이썬에는 numpy라는 강력한 라이브러리가 존재합니다. 이를 활용하면 정수 덧셈/뺄셈처럼 손쉽게 결과값을 도출할 수 있습니다.
기존의 array(list)를 numpy.array로 바꾸고 연산을 한 후, 다시 리스트로 변환시키면 됩니다.

profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.

0개의 댓글