알고리즘/프로그래머스

<프로그래머스> 행렬의 곱셈

흰색텀블러 2024. 8. 7. 20:30

<링크>

https://school.programmers.co.kr/learn/courses/30/lessons/12949?language=java

 

프로그래머스

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

programmers.co.kr

 

<문제>

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

<제한사항>

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

<입력 및 출력>

<고려사항>

1. 행렬의 곱셈에 대한 특징 고려하기.

2. 곱할수 있는 형태이기 때문에, 첫번째 행렬의 열수와 두번째 행렬의 행 개수는 동일할 것.

<풀이 - Python>

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

<풀이 - Java>

class Solution {
	public int[][] solution(int[][] arr1, int[][] arr2) {
		int[][] answer = new int[arr1.length][arr2[0].length];

		for (int i = 0; i < answer.length; i++) {
			for (int j = 0; j < answer[0].length; j++) {
				int sum = 0;
				for (int k = 0; k < arr2.length; k++) {
					sum += arr1[i][k] * arr2[k][j];
				}
				answer[i][j] = sum;
			}
		}
		return answer;
	}
}

 

코드 진행 순서

1. 2차원 배열 선언 및 초기화

2. answer.length 를 통해 행 반복

3. answer[0].length를 통해 열 반복

4. 곱셈 진행. (주의할것 : i 행의 k번째 요소 * k행의 j 번째요소를 곱하는거임) (행렬 곱 : m*n n *k -> m*k)

5. 출력

 

소요시간 : 15분

- 학부연구생 시절, 데이터 분석 관련 프로젝트 하다가 직접 짜본경험이 있어서 쉽게 풀수 있었습니다..