프로그래머스 - 행렬의 덧셈
내 풀이
파이썬
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
x = []
for j in range(len(arr1[0])):
x.append(arr1[i][j] + arr2[i][j])
answer.append(x)
return answer
배열의 길이를 이용해서 이중 for문으로 처리
각 배열의 총 크기만큼은 반복을 해야하니까 처음에는 arr1의 크기 만큼 반복 (arr1, arr2의 배열 크기는 어차피 같으니까 1이나 2 어느쪽으로 하던 상관 없음)
이제 합을 구해서 다시 배열에 넣어야 하니까 x라는 변수에 빈 방 생성
안에 for 반복문을 한번 더 넣어서 합 구하기 반복문 시작
한번 사이클에 j가 arr1[0] 의 크기 만큼 돌아야함 = 2차원 배열의 방 크기만큼 반복문이 돌아야함
테스트 코드 예시를 보면 2차원 배열인 경우도 있고 아닌 경우도 있음.
그렇게 나온 합계를 x에 넣고
두번째 for문이 끝나고 첫번째 for문으로 다시 돌아올때 그 값을 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]]))
한줄 for문과 zip을 활용한 방식
천천히 해석을 해보면 처음에 for a,b in zip(A,B) 부분 부터 인자 A,B가 들어가서 zip의 영향으로
a = [1,2],[5,6]
b = [3,4],[7,8]
이렇게 바뀐다.
그리고 나서 이 a,b가 다시 zip 인자로 들어가서 반복문을 다시 돌린다.
a,b가 c,d에 담기는데
c = [1,2],[3,4]
d = [5,6],[7,8]
이 된다.
그리고 c+d의 계산대로 [1,2]랑 [5,6]이 더해져 [6,8]이 되고 [3,4]랑 [7,8]이 더해져서 [10,12]가 된다.
다른 방법
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
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(sumMatrix([[1,2], [2,3]], [[3,4],[5,6]]))
이중 for문이고 행렬의 전체 크기와 2차원 배열의 크기 만큼 도는건 똑같지만
반복문 안의 내용이 다르다.
+=를 활용해서 한번에 계산한 모습