스터디/코딩테스트

python 코딩테스트 - 프로그래머스 행렬의 곱셈

공대생철이 2023. 11. 14. 21:45
728x90

출처 : 프로그래머스

 

처음 든 생각

- 먼저 행렬 연산을 손으로 직접 써보자

- arr1에서 행을 선택한 후 arr2에서 열 별로 순차적으로 곱해서 더해주면 된다. (아래 그림과 같은 동작)

- arr1의 행 별 반복문(1), arr2의 열 별 반복문(2), 열 안에 행 별 반복문(3) 총 3단계의 반복문이 등장해야겠다.

 

나의 답

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

arr1의 행 별 반복문으로 크게 감싼 후 범위 지정 -> 반복문 (1)

연산 결과를 한 행 씩 출력해서 append를 해야하므로 빈 리스트 선언해준다.

 

arr2의 열 별 반복문 감싼 뒤 범위 지정 -> 반복문 (2)

곱셈 연산 결과값을 담기 위한 임시 변수 1개 선언

 

arr2의 열 안 에서 행 별 반복문 감싼 뒤 범위 지정 -> 반복문 (3)

곱한 값을 다 더해주어 행 별로 연산 마치고 정답 리스트에 추가

 

행렬 연산의 순서에 따라 반복문의 범위를 지정해주는 것이 굉장히 헷갈렸다. 실제로 처음 했을 때는 인덱스의 오류로 런타임 에러가 났었는데 반복문 (2)의 범위를 arr1[0]으로 실수했었다. 어떤 배열의 행인지 열인지 잘 확인하면서 순서대로 범위, 인덱싱을 잘하자.

728x90