알고리즘

프로그래머스 - 행렬의 덧셈

Heidong 2022. 1. 21. 17:00
반응형

 

내 풀이

 

파이썬

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차원 배열의 크기 만큼 도는건 똑같지만

반복문 안의 내용이 다르다.

+=를 활용해서 한번에 계산한 모습

반응형