[알고리즘] 행렬의 덧셈

DongGyu Jung·2021년 10월 3일
0
post-thumbnail

※ 본 사진과 해당 게시글 내용의 문제 모두 프로그래머스[Programmers]사이트에 발췌해왔습니다.

❓ 문제

행렬의 덧셈은 
행과 열의 크기가 같은 두 행렬의 
같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 

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]]

❗ 풀이

My Code

def solution(arr1, arr2):
    ls = []
    for i in range(len(arr1)) :
        answer = [arr1[i][k] + arr2[i][k] for k in range(len(arr1[i]))]
        ls.append(answer)
    return(ls)

필자는 ls라는 빈 리스트를 새롭게 만들어 for문을 통해 얻은 값들을 append하는 방법을 사용했다.

각 같은 위치의 값들을 호출하는 방법에는 len()함수를 통해 지정해주었고 모든 위치를 호출하기 위해 for문을 사용하였다.

아직 리스트 컴프리헨션(List Comprehension)을 사용하는데에 익숙치 않아 고전했던 문제이다.

❣ 다른 풀이

(1)

def sumMatrix(A,B):
    answer = [[c + d for c, d in zip(a, b)] for a, b in zip(A,B)]
    return answer

사실 이 코드를 보고 이해하는데에 시간이 조금 소요됐다.
정말 깔끔하고 군더더기 없는 컴프리헨션 사용을 보여준 코드인 것 같다.

zip() 함수의 사용이 인상 깊은데
1차 반복, 즉 가장 바깥에 있는 For문에서
입력값인 두 행렬을 zip()을 통해 각 행렬에 서로 같은 위치에 있는 내부 리스트들을 묶어 주었고,

2차 반복, 즉 가장 안쪽에 있는 For문에서
1차 반복에서 묶어준 내부 리스트에 zip()함수를 통해 서로 같은 위치에 있는 내부 요소들을 짝지어 계산하게끔 만들어주었다.

해당 문제를 통해 여러 변수의 특정한 값들을 짝지어주는 zip 함수에 대해 많은 것을 배울 수 있었다. 👏👏


(2)

def sumMatrix(A,B):
    for i in range(len(A)) :
        for j in range(len(A[0])):
            A[i][j] += B[i][j] 
    return A

이 풀이는
이중 For문이라는 점은 위 풀이들과 같지만

기준을 첫 번째 행렬 인수를 기준으로 같은 위치에 있는 두번째 행렬인수의 값들을 +=로 누적합 시켜
기준이였던 첫 번째 행렬 인수를 Return 시키는 방법을 사용했다.

0개의 댓글