PS (Problem Solving)/Programmers

[프로그래머스] 행렬의 곱셈 - 파이썬, 자바스크립트

캐럿노트 2022. 11. 8. 02:00

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12949

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

설계

- 행렬의 곱셈 방식을 알아야 한다.

- 처음 빈 배열을 생성할 때 arr2가 아닌 arr1으로 잘못 계산하여 런타임 에러가 났다.

 

행렬의 곱셈

A는 2×3 행렬, B는 3×2 행렬이라고 가정했을 때 AB의 결과는 2×2 행렬이다.

선으로 연결된 것끼리 곱한 후 더한다.
행렬의 곱셈 예시

파이썬

def solution(arr1, arr2):
    answer = [[0] * len(arr2[0]) for _ in range(len(arr1))]     # 규격에 맞는 빈 배열 생성
    
    # 계산
    for i in range(len(arr1)):
        for x in range(len(arr2[0])):
            for y in range(len(arr1[0])):
                answer[i][x] += arr1[i][y] * arr2[y][x]
    return answer

 

자바스크립트

function solution(arr1, arr2) {
    let answer = [];
    
    // 행렬 빈 배열 만들기
    for (let i = 0; i < arr1.length; i++) {
        answer.push(new Array(arr2[0].length).fill(0))
    }
    
    // 배열에 숫자 더하기
    for (let i = 0; i < arr1.length; i++) {
        for (let j = 0; j < arr2[0].length; j++) {
            for (let k = 0; k < arr1[0].length; k++) {
                answer[i][j] += arr1[i][k] * arr2[k][j];    
            }
        }
    }
    return answer
}