코드
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
두 행렬 arr1, arr2를 더하는 문제이다.
numpy를 사용하면 쉽게 할 수 있지만, 라이브러리를 사용하지 않고 어떻게 하면 구현할 수 있을지 고민하는데 시간이 소요되었다.
하지만 조금만 생각하면 쉽게 풀 수 있는 문제이다.
문제에서 주어진 예시를 가지고 살펴보면 다음과 같다.
행렬의 덧셈은 같은 크기의 행렬끼리만 더할 수 있다.
그리고 덧셈의 결과는 같은 자리에 위치한 요소끼리 더한 값이다.
따라서, 우리는 두 행렬에서 같은 자리에 위치한 값을 찾아 더해주면 된다.
어떻게 자리를 찾는지가 포인트이다.
파이썬에서 2차원 배열은 [행][열]로 표현한다. 행이 먼저이고, 그다음이 열이기 때문에 행부터 접근하게 된다.
그러므로, 첫 번째 for문이 행을, 두 번째 for문이 열을 의미한다.
2차원 배열에서 len()을 이용하면 행의 개수를 리턴한다.
첫 번째 for문에서는 행을 탐색해야 하므로 len(arr1)만큼 반복하는 것이다.
그럼 열의 개수는 어떻게 접근해야 할까?
0행의 길이를 구하면 된다. 그래서 len(arr[0])만큼 두 번째 for문을 반복한다.
우리는 이제 행렬의 모든 원소에 접근할 수 있다.
arr1, arr2 각각의 원소를 모두 더해 새로운 행렬로 만들 수도 있다.
하지만, arr1에 arr2의 원소를 더하는 방법으로 해결하였다.
그 이유는, 지나간 arr1의 요소를 다시 사용하는 일이 없기 때문에 새로운 행렬을 만들어 메모리를 사용하지 않으려고 했다.
다른 사람의 코드
def solution(arr1, arr2):
answer = [[c + d for c, d in zip(a,b)] for a, b in zip(arr1, arr2)]
return answer
for문을 두 번 사용하면 그만큼 연산 시간이 배로 늘어난다.
이 코드는 zip을 사용하여 for문을 한 번만 사용하였다는 점에서 충분히 배울만 하다고 생각했다.
2차원 배열에서 zip을 사용한 코드는 처음 보는 것 같아 zip에 대해서 조금 더 공부하고 정리해 보아야겠다.