ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 행렬의 덧셈
    Programmers 2023. 3. 23. 21:40
    728x90

    문제 설명

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

    제한 조건

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

    입출력 예

    arr1 arr2 return

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

    나의 풀이

    def solution(arr1, arr2):
        answer = []
        for i in range(len(arr1)):
            answer.append([arr1[i][j] + arr2[i][j] for j in range(len(arr1[0]))])
        return answer
    
    • 반복문과 리스트 컴프리헨션을 활용하여 행렬의 덧셈을 구현하였다
    • 시간 복잡도에서 매우 아쉬운 결과를 낸 것 같아 슬프다 ㅠㅠ

    다른 사람의 풀이를 보고 배워야겠다…

    다른 사람의 풀이

    def sumMatrix(A,B):
        answer = [[c + d for c, d in zip(a,b)] for a, b in zip(A,B)]
        return answer
    
    • 같은 맥락이지만, zip 함수를 사용하여 코드가 더 깔끔해보인다.
    • 해당 풀이 좋아요가 가장 많은 것을 보면 numpy 모듈을 사용하지 않는한 시간복잡도는 O(m**2)이 맞는 것 같다.. 더 열심히 공부하자
    def solution(arr1,arr2):
        return [list(map(sum, zip(*x))) for x in zip(arr1, arr2)]
    
    • 위 두 풀이보다 시간 복잡도를 훨씬 낮춰준다.
    • zip(*x) : 튜플 언패킹을 활용해 x 변수 하나만을 사용, 두개의 튜플을 받아들여 덧셈을 하고 리스트에 저장한다.
    728x90

    'Programmers' 카테고리의 다른 글

    같은 숫자는 싫어  (0) 2023.03.26
    최대공약수와 최소공배수  (0) 2023.03.26
    나누어 떨어지는 숫자배열  (0) 2023.03.19
    실패율  (0) 2023.03.19
    제일 작은 수 제거하기  (0) 2023.03.19
Designed by Tistory.