[프로그래머스,Level 2] 행렬의 곱셈 (JAVA 구현)

2021. 1. 26. 15:19·CodingTest/프로그래머스(Programmers)
반응형

- 첫 풀이 및 정답풀이

  고등학교인가 수학 시간에 배운 행렬의 곱셈에 대한 문제이다. 이에 대한 개념을 모르더라도 간단하게 검색을 통해 알 수 있을 정도로 쉬운 개념이므로 모르는 분들은 한 번 검색 후 풀어보는 것을 추천한다. 

 


  우선 이 문제의 정답을 담을 배열의 크기는 arr1의 행의 길이와 arr2의 열의 길이로 만들어 준다. 다음으로 예제 1번을 예로 들어보면, answer 배열의 0,0에 들어가는 값은 arr1(0,0) * arr2(0,0) + arr1(0,1) * arr2(1,0)이 된다. 여기서 알 수 있는 사실은 동일한 개수의 순서쌍을 arr1과 arr2가 갖는다는 사실이다. 여기서는 2개의 순서쌍이 존재한다. arr1의 0,0과 arr2의 0,0 그리고 arr1의 0,1과 arr2의 1,0.

 

  또한 위의 순서쌍의 규칙을 보면, arr1은 행이 고정된 채로 열이 증가하고, arr2는 열이 고정된 채로 행이 증가한다. 이를 바탕으로 반복문을 세우면 된다. 자세한 내용은 코드를 보며 이해하자.

 

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        // 1. answer[arr1의 행의 길이][arr2의 열의 길이] 2차원 배열 생성.
        int[][] answer = new int[arr1.length][arr2[0].length];
        
        // 2. i는 answer의 행을 참조, j는 answer의 열을 참조.
        for(int i = 0;i<answer.length;i++){
            for(int j = 0;j<answer[i].length;j++){
                // 3. k는 arr1과 arr2가 가지고 있는 순서쌍의 개수(arr1의 열의 길이 = arr2의 행의 길이)
                for(int k =0;k<arr1[i].length;k++){
                    // 4. answer[i][j] = arr1은 행이 고정된 채로 열이 증가, arr2는 열이 고정된 채로 행이 증가의 누적값.
                    answer[i][j] += arr1[i][k] * arr2[k][j];
                }       
            }
        }
        
        return answer;
    }
}
저작자표시 (새창열림)
'CodingTest/프로그래머스(Programmers)' 카테고리의 다른 글
  • [프로그래머스,Level 2] N개의 최소공배수 (JAVA 구현)
  • [프로그래머스,Level 2] JadenCase 문자열 만들기 (JAVA 구현)
  • [프로그래머스,Level 2] 피보나치 수 (JAVA 구현)
  • [프로그래머스,Level 2] 최솟값 만들기 (JAVA 구현)
뜸부깅
뜸부깅
코딩에 대한 여러 개인적인 생각을 정리하고 공부를 하는 공간입니다!!
  • 뜸부깅
    코오오딩
    뜸부깅
  • 전체
    오늘
    어제
    • Note (429)
      • Skill (31)
        • Java & Spring (9)
        • Javascript & HTML & CSS (0)
        • React (0)
        • Next.js (22)
      • CodingTest (389)
        • 백준 온라인 저지(BOJ) (140)
        • 프로그래머스(Programmers) (79)
        • LeetCode (170)
      • Algorithm & Data Structure (6)
      • [Project] 포트폴리오 (3)
        • Front end (3)
        • Back end (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    medium
    meidum
    boj1427
    leetcode 2236
    백준7576자바
    백준1427
    boj2108
    백준
    BOJ
    Easy
    자바
    알고리즘
    next 14
    백준2751
    component-scan
    Java
    백준1260
    TypeScript
    프로그래머스
    백준7576
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뜸부깅
[프로그래머스,Level 2] 행렬의 곱셈 (JAVA 구현)
상단으로

티스토리툴바