본문 바로가기

TIL

240625-(P) 37.행렬의 덧셈

 

 

처음에는 리스트내에 값끼리 합산이 가능한지 확인하기 위해

 

a1=[1,2]
a2=[2,3]
print(a1+a2)

아...이거는 그냥 리스트끼리 합쳐지는거지 안에 있는 요소끼리 합산은 아니구나 확인함

이걸로는 안되겠고 그럼 뭘 해야 할까?

 

행렬끼리 더할때는 일단 n * n 행렬에서 행과 열을 맞춰야 되는데, 그럼 이걸 요소로 해서 고등학교때 배운 지식 출동

 

(a11 a12)

(a21,a22)

 

행렬이 이런식으로 구분할 수 있으니 그럼 행과 열을 각각 i, j 로 대응하여 

 

(a11+b11, a12+b12)

(a21+b21, a22+b22)

 

이런식으로 해야겠네 까지 생각을 전개함

 

그렇게 처음 짜본 코드는 아래와 같음

def solution(arr1,arr2):
    answer=[]
    for i in range(0,len(arr1[0])):
        arr3=[]
        for j in range(0,len(arr2[0])):
            arr3.append(arr1[i][j]+arr2[i][j])
        answer.append(arr3)
    return answer
    
    
print(solution([[1,2],[2,3]],[[3,4],[5,6]]))

print(solution([[1],[2]],[[3],[4]]))

 

2 * 2 행렬은 제대로 작성하는데 1 * 2 가 작동을 안하네.

 

머리를 굴리기 시작

 

i를 len(arr1[0]) 으로 하게 되면 0 부터 2 까지니까 행은 0과 1이 작동

 

j를 len(arr2[0])으로 하게 되면 0부터 2 까지니까 열은 0과 1이 작동

 

근데 이렇게 되면 2*2는 제대로 작동 하게 되나

1*1에서 문제가 발생하게 됨

 

왜냐면 ([1],[2]) + ([3],[4]) 의 경우 위의식을 사용하게 되면

 

i는 [1] 이니까 1

j는 [3] 이니까 1

 

 

1*2 행렬이 아니라 1*1 행렬이 도출되게 됨 그러므로 i 와 j 의 range 범위를 재조정함

 

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

 

len(arr1[0]) 을 len(arr1) 로 변경하여  1*2 행렬의 경우에도 2개가 대입되고 len(arr2) 대신 len(arr2[0]) 을 활용하여 값요소 카운팅을 맞춤

 

사실 지금도 어떤게 행이고 열인지 명확히 개념적으로 다가오지는 않으나, 추후에 해당 문제 한번더 고민해봐야겠다.

 

 

성공!