programmers - 행렬의 곱셈

marafo·2020년 9월 7일
post-thumbnail

문제 설명

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

제한 조건

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

function solution(arr1, arr2) {
    let answer = [];
    let row;
    let element;
    
    for(let i = 0; i < arr1.length; i++){
        row = [];
        for(let j = 0; j < arr2[0].length; j++){
            element = 0;
            for(let k = 0; k < arr2.length; k++){
                element += arr1[i][k] * arr2[k][j];
            }
            row.push(element);
        }
        answer.push(row);
    }
    return answer;
}

1) 가장 바깥 for문은 row(행)의 갯수를, 두 번째 for문은 column(열)의 갯수를 정의.

2) 마지막 k를 사용한 for문에서 주의할 점은 (a by b) x ( b by c)의 결과는 a by c 크기의 행렬이 되기 때문에 k가 후자 배열인 arr2.length 만큼 진행하거나 arr1[0].length(인덱스는 0이 아니고 arr1의 길이 중 임의 값이어도 가능)로 해야 한다.

주어진 행렬들의 사이즈가 가변적일 경우가 있어서 행렬 요소마다 계산 결과값을 한 개의 변수에 누적해야 한다는 점은 캐치했는데 그것을 3중 반복문( 행, 열, 행과 열 사이의 반복 계산)으로 풀어내지 못함.

def solution(arr1, arr2):
	answer = []

	for i in range(len(arr1)):
		row = []
		for j in range(len(arr2[0])):
			element = 0
			for k in range(len(arr2)):
				element += arr1[i][k] * arr2[k][j]
			row.append(element)
		answer.append(row)
	
	return answer

참고) https://ms3864.tistory.com/146

profile
프론트 개발자 준비

0개의 댓글