Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발계발

프로그래머스 - 행렬의 곱셈(12949) 본문

알고리즘

프로그래머스 - 행렬의 곱셈(12949)

Ju_Nik_E 2024. 5. 3. 09:43

문제 설명

2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

 

제한 조건

- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.

 

접근 방식

- 행렬의 곱셈 공식을 알아야 함

- a*b 크기의 행렬과 c*d 크기의 곱셈의 결과 행렬의 크기는 a*d이다.

- 첫째 행렬의 열 갯수와 둘째 행렬의 행 갯수가 동일해야한다.

- 곱셈한 결과의 1행의 0번 인덱스는

[첫번째 행렬의 (0,0) 원소 * 두번째 행렬의 (0,0) 원소] + [첫번째 행렬의 (0,1) 원소 * 두번째 행렬의 (1,0) 원소]

-> 즉, 첫번째 행렬은 행의 인덱스(x)가 증가, 두번째행렬은 열의 인덱스(y)가 증가

 

1. [arr2의 안에 1차원 배열의 크기 * arr2의 1차원 배열의 크기] 의 배열 생성

2. 첫번째 행렬의 y값이 1씩 증가하고, 두번째 행렬의 x값이 1씩 증가하도록 중첩 for문 구현

 

정답 코드

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