코딩테스트 - 프로그래머스/JAVA

[프로그래머스 / 연습문제 / 자바(JAVA)] 행렬의 곱셈

읁; 2024. 4. 15. 14:17

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12949

 

프로그래머스

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

programmers.co.kr

 

풀이

로직

하... 나는 문과라 행렬을 배운 적이 없는데 ^-^...

하지만 질문하기 탭의 어떤 분께서 행렬의 곱셈을 구하는 법을 알려주셔서,

그걸 참고해서 로직을 짰다. (신준영 님, 감사합니다!)

  1. 열의 수행의 수같을 때만 두 행렬을 곱할 수 있다.
    • 곱할 수 있는 행렬만 arr1arr2로 주어진다고 나와있음.
    • arr1의 열의 수는 arr1[1].length arr2의 행의 수는 arr2.length
    • n = arr2.length
  2. arr1[m][n]arr2[n][k] 를 곱한 행렬 answer의 크기는 answer[m][k]가 된다.
    • m = arr1.length
    • k = arr2[0].length

코드

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int m = arr1.length;
        int k = arr2[0].length;
        int n = arr2.length;

        int[][] answer = new int[m][k];

        for(int i=0; i<m; i++) {
            for(int j=0; j<k; j++) {
                for(int l=0; l<n; l++) {
                    answer[i][j] += arr1[i][l] * arr2[l][j];
                }
            }
        }

        return answer;
    }
}

채점 결과

정확성  테스트
테스트 1 〉    통과 (1.09ms, 71.5MB)
테스트 2 〉    통과 (6.65ms, 83.9MB)
테스트 3 〉    통과 (6.65ms, 91.8MB)
테스트 4 〉    통과 (0.56ms, 65.7MB)
테스트 5 〉    통과 (16.56ms, 85.4MB)
테스트 6 〉    통과 (5.43ms, 83.1MB)
테스트 7 〉    통과 (0.48ms, 78MB)
테스트 8 〉    통과 (0.23ms, 75.8MB)
테스트 9 〉    통과 (0.15ms, 84.7MB)
테스트 10 〉    통과 (9.07ms, 88.1MB)
테스트 11 〉    통과 (1.49ms, 78.5MB)
테스트 12 〉    통과 (0.23ms, 78.7MB)
테스트 13 〉    통과 (5.41ms, 86MB)
테스트 14 〉    통과 (10.04ms, 76.1MB)
테스트 15 〉    통과 (3.60ms, 77.2MB)
테스트 16 〉    통과 (1.56ms, 78.3MB)

채점 결과
정확성: 100.0
합계: 100.0 / 100.0

 

배운 점

  1. 행렬의 곱셈 기초...