코딩테스트/PYTHON

[프로그래머스][PYTHON] Lv. 1 행렬의 덧셈

_알파카 2024. 8. 5. 17:15
728x90

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/12950

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

'행렬'이라는 단어를 보자마자, numpy가 생각났다. 

분명 문제에서 원하는 풀이는 아닐 것 같지만, numpy를 이용하면 행렬 연산을 쉽게 구할 수 있기 때문이다! 

 

첫 번째 풀이

import numpy as np
def solution(arr1, arr2):
    # numpy 배열로 변환 후 계산
    a1 = np.array(arr1)
    a2 = np.array(arr2)
    return (a1 + a2).tolist()

 

numpy는 파이썬에서 수학적 계산을 위한 핵심 라이브러리이며, 

특히 다차원 데이터를 효율적으로 처리할 수 있는 기능을 제공한다. 

 

먼저, import를 이용해 numpy 라이브러리를 불러온다. 

이 후, 주어진 2개의 행렬(arr1, arr2)를 각각 numpy 배열로 바꾸고, 

이들의 덧셈을 수행한다. 

 

numpy 배열을 사용했기 때문에 단순히 + 연산자를 통해 원하는 행렬 계산 결과를 뽑아낼 수 있다. 

 

 

참고로, numpy 배열을 이용한 행렬 덧셈 결과는 아래와 같으며,

# arr1 = [[1, 2], [2, 3]]
# arr2 = [[3, 4], [5, 6]]
a1 = np.array(arr1)
a2 = np.array(arr2)
print(a1 + a2)

 

 

numpy 배열을 이용하지 않은 행렬 덧셈 결과는 아래와 같다.

# arr1 = [[1, 2], [2, 3]]
# arr2 = [[3, 4], [5, 6]]
print(arr1 + arr2)

 

 

이후, 문제에서 원하는 형식으로 바꾸기 위해 tolist() 함수를 사용해 본래의 타입으로 변경한다.

 

두 번째 풀이

아래는 numpy를 사용하지 않은 풀이이다. 

def solution(arr1, arr2):
    answer = []
    for i, j in zip(arr1, arr2):
        tmp = []
        for x in range(len(i)):
            tmp.append(i[x] + j[x])
        answer.append(tmp)
    return answer

 

zip 함수를 사용해, 각 행렬의 동일한 인덱스를 얻어낸다. 

즉, 첫 번째 입출력 예시에 대해 확인해보면, 

i에는 [1, 2],  j에는 [3, 4]가 가장 먼저 담기게 된다. 

이를 순회하며, 

1+3를 하여 임시배열(tmp)에 추가하고, 

2+4를 하여 임시배열(tmp)에 추가한다. 

 

각 원소에 대해 덧셈을 수행한 후, 

구해진 임시 배열을 정답 배열(answer)에 추가한다! 

 

 

다른 사람 풀이

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
def solution(arr1, arr2):
    answer = [[c + d for c, d in zip(a,b)] for a, b in zip(arr1, arr2)]
    return answer

 

 

728x90