알고리즘과 자료구조/[프로그래머스] LV.2
[프로그래머스] 행렬의 덧셈
Merware
2024. 8. 24. 15:49
문제 링크
문제 설명
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 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):
arr3 = []
for i in range(len(arr1)):
arr3.append(arr1[i] + arr2[i])
return arr3
“실행한 결괏값 [[1,2,3,4],[2,3,5,6]]이 기댓값 [[4,6],[7,9]]과 다릅니다.”
라고 에러메시지가 뜬다. 내가 푼 풀이는 단순 배열 한 차원을 덧셈할 때 사용하는 것이고, 위 문제는 arr1과 arr2 배열 안에 배열이 있는 행렬이므로
def solution(arr1, arr2):
answer = []
arr3 = []
for i in range(len(arr1)):
for j in range(len(arr1[i])):
arr3.append(arr1[i][j] + arr2[i][j])
answer.append(arr3)
return answer
arr3 배열을 만들어서 i는 arr1의 길이를 범위로 j는 arr[i]일 때 i번째 값 즉, 배열을 순서대로 더하고 arr3에 더해주는 식으로 짜보았다. 그런데
“실행한 결괏값 [[4,6,7,9],[4,6,7,9]]이 기댓값 [[4,6],[7,9]]과 다릅니다.”
라는 에러가 떴는데 아마 arr3 = [] 를 i 반복문 안에 넣어야 하는데 루프를 돌지 않으니 생긴 문제인 것 같다.
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
arr3 = []
for j in range(len(arr1[i])):
arr3.append(arr1[i][j] + arr2[i][j])
answer.append(arr3)
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
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(sumMatrix([[1,2], [2,3]], [[3,4],[5,6]]))
zip
함수 사용:zip(A, B)
는 행렬A
와B
의 행을 한 쌍으로 묶어줍니다.- 예를 들어,
A
가[[1, 2], [2, 3]]
이고B
가[[3, 4], [5, 6]]
일 때,zip(A, B)
는([1, 2], [3, 4])
와([2, 3], [5, 6])
를 반환합니다.
- 예를 들어,
이중 리스트 컴프리헨션:
- 바깥쪽 리스트 컴프리헨션에서
for a, b in zip(A, B)
는 행렬A
와B
의 각각의 행을 순회합니다.- 첫 번째 순회:
a = [1, 2]
,b = [3, 4]
- 두 번째 순회:
a = [2, 3]
,b = [5, 6]
- 첫 번째 순회:
- 안쪽 리스트 컴프리헨션에서
for c, d in zip(a, b)
는 각 행의 요소들을 순회하여 더해줍니다.- 첫 번째 순회에서
a = [1, 2]
와b = [3, 4]
:zip(a, b)
는[(1, 3), (2, 4)]
를 반환합니다.[c + d for c, d in zip(a, b)]
는[1 + 3, 2 + 4]
로 계산되어[4, 6]
을 반환합니다.
- 두 번째 순회에서
a = [2, 3]
와b = [5, 6]
:zip(a, b)
는[(2, 5), (3, 6)]
를 반환합니다.[c + d for c, d in zip(a, b)]
는[2 + 5, 3 + 6]
로 계산되어[7, 9]
을 반환합니다.
- 첫 번째 순회에서
- 바깥쪽 리스트 컴프리헨션에서
결과 반환:
바깥쪽 리스트 컴프리헨션이
[[4, 6], [7, 9]]
를 반환합니다.sumMatrix
함수는 최종적으로[[4, 6], [7, 9]]
를 반환합니다.내용이 워낙 헷갈리고 복잡해서 chat gpt로 정리한 내용을 올린다.