본문 바로가기

파이썬 프로그래밍/파이썬 심화

[Python] 파이썬 예제. 행렬의 덧셈

본 게시글은 http://tryhelloworld.co.kr/ 에 있는 문제를 참고하여 풀이한 것입니다.

문제

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬을 입력받는 sumMatrix 함수를 완성하여 행렬 덧셈의 결과를 반환해 주세요.

예를 들어 2x2 행렬인 A = ((1, 2), (2, 3)), B = ((3, 4), (5, 6)) 가 주어지면, 같은 2x2 행렬인 ((4, 6), (7, 9))를 반환하면 됩니다.(어떠한 행렬에도 대응하는 함수를 완성해주세요.)


1
2
3
4
5
6
7
def sumMatrix(A,B):
    answer = []
    
    return answer
 
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(sumMatrix([[1,2], [2,3]], [[3,4],[5,6]]))
cs






풀이

1
2
3
4
5
6
7
8
9
10
11
def sumMatrix(A,B):
    answer = []
    for i in range(len(A)): #리스트A,B 구별
        tmp=[] #A출력하고 B 출력하기 위한 구분
        for j in range(len(A[i])): #A와B에 서로 같은 위치의 값 더하기
            tmp.append(A[i][j]+B[i][j]) #Ex) 1+3,2+4
        answer.append(tmp) #첫번째 계산이 끝나면 append
    return answer
 
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(sumMatrix([[1,2], [2,3]], [[3,4],[5,6]]))
cs


왜 for문이 두번 들어갈까?

for문이 2번이 나온 이유는 해당 행렬을 2번 나눌 수 있기 때문입니다.

1. 크게 A, B로 나눴을때
[[1,2], [2,3]], [[3,4],[5,6]]
A                        A                            B                 B

 2. A안에 있는 좌표, B안에 있는 좌표를 i,j로 나눈다
[[1,2], [2,3]], [[3,4],[5,6]]
A                        A                                B                    B
A[i] A[j] A[i] A[j] B[i] B[j] B[i] B[j]

3. 이것을 코드에 맞게 계산해본다면(같은색끼리 덧셈)
[[1,2], [2,3]], [[3,4],[5,6]]

A                        A                                B                    B
A[i] A[j] A[i] A[j] B[i] B[j] B[i] B[j]


즉 A[i][j]+B[i][j]를 하면 우리가 원하는 행렬덧셈이 나오게 되는것이죠
이렇게 행렬덧셈을 2번 해줍니다
그러면 [4,6]이 나오고 다음 리스트에 덧셈을 넣어주기 위해
tmp=[]이 처음에 나오게 되는것이죠

실행







만약 tmp=[]이 처음에 초기화 한다면?