가끔 생각을 해요 ʕتʔ

🍒 프로그래머스 - 행렬의 덧셈

문제

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 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)):
        row = []
        for j in range(len(arr1[i])):
            row.append(arr1[i][j] + arr2[i][j])
        answer.append(row)

    return answer

# 이중 for문 사용
# 첫 번째 for문(arr1 길이만큼 반복)
# row 리스트 만들기
# 두 번째 for문(arr1[i] 길이만큼 반복)
# arr1[i][j] + arr2[i][j] -> row에 담기
# 두 번째 for문 끝난 후 answer에 row 담기

다른 사람의 풀이

def sumMatrix(A,B):
    answer = [[arr1[i][j] + arr2[i][j] for j in range(len(arr1[0]))] for i in range(len(arr1))]
    return answer
# zip() 사용
def sumMatrix(A,B):
    answer = [[c + d for c, d in zip(a,b)] for a, b in zip(A,B)]
    return answer
# 넘파이 사용
import numpy as np

def sumMatrix(A,B):
    A_np = np.array(A)
    B_np = np.array(B)
    result = A_np + B_np
    return result.tolist() # 넘파이 배열 형태를 다시 리스트 형태로 변환

 

🍒 TIL

 

  • '행렬의 덧셈' 문제에서 나의 경우 직관적으로 풀고 제출했는데, 다른 사람의 풀이엔 더 다양한 방법들이 많았다. 내가 작성한 코드를 단 한 줄로 작성했거나, zip()이나 numpy를 사용하는 경우도 있었다. 내가 작성한 코드도 가독성은 좋지만 어떻게 하면 좀 더 간결하고 깨끗한 코드를 작성할 수 있을지, 또 알맞은 상황에서 사용하면 좋을 메서드는 무엇인지 고민해볼 수 있어야겠다. zip()은 어제 새로 알게 된 함수라 생각은 났지만 활용하는 데 익숙하지 않았다. 익숙하지 않더라도 사용하기 적절한 상황에서 자주 사용해보려고 시도해봐야겠다.

공유하기

facebook twitter kakaoTalk kakaostory naver band