순간을 기록으로

[프로그래머스] 행렬의곱셈/ Java 본문

Problem Solving

[프로그래머스] 행렬의곱셈/ Java

luminous13 2022. 2. 14. 10:43

문제

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

 

프로그래머스

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

programmers.co.kr

풀이

행렬의 곱셈을 구하는 단순한 문제이다. 

행렬의 곱셈은 다음과 같다.

A행렬을 MxK, B행렬을 KxN이라면 행렬의 곱셈 후 생기는 행렬은 MxN행렬이다. 

앞 행렬의 열과 뒷 행렬의 길이가 같은 행렬만 곱셈을 할 수 있다. 문제에서 주어지는 행렬은 모두 이 규칙에 맞는 행렬들이 입력으로 들어온다. 따라서 연산만 구현하면 된다.

 

주의할점

딱히 없다.

코드

package 프로그래머스.레벨2.행렬의곱셈.첫풀이;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

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


        for (int i=0; i<arr1.length; i++) { // 앞 행렬의 행 갯수만큼 반복합니다.

            for (int j=0; j<arr2[0].length; j++) {  // 뒤 행렬의 열 갯수만큼 반복합니다.

                for (int k=0; k<arr1[0].length; k++) {  // 앞 행렬의 열(=뒷 행렬의 행) 갯수만큼 반복합니다.

                    answer[i][j] += arr1[i][k]*arr2[k][j];

                }
            }
        }

        return answer;
    }

    @Test
    void test() {
        Assertions.assertArrayEquals(new int[][]{{1,15}, {15,15}, {15,15}},
                solution(new int[][]{{1,4}, {3,2}, {4,1}}, new int[][]{{3,3} ,{3,3}}));
    }
}
Comments