본문 바로가기
Algorithm/Programmers

[프로그래머스(programmers)] (Lv2) 행렬의 곱셈

by 광진구뚝배기 2021. 6. 12.

알고리즘 문제 풀이 / 프로그래머스 (programmers)  - 행렬의 곱셈

 

 

문제 링크

 

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

 

코딩테스트 연습 - 행렬의 곱셈

[[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

programmers.co.kr

 

 

 

 

문제 풀이

 

 

 

내가 고등학생 일 때, 교육과정에서 행렬이 빠졌었기 때문에 행렬이 있었다는 말만 들어봤지 행렬 개념 조차 몰랐다. 그래도 문제에서 설명해주겠지 라는 마음에 문제를 들어갔는데 행렬에 대한 설명은 없었다. 행렬의 결과를 완성하는 함수를 작성해달라는 지문 한 줄 있었고 자세한 입출력예제에 관한 설명도 없이 예제 2개만 써있었다. 그 결과값만 봐서는 행렬을 이해할 수 없었기에 행렬부터 공부해야 겠다는 생각이 들었다. 내가 어릴 때 오빠가 풀었던 수학의 정석을 구경해본적이 있었다. 그 때 행렬 기호가 신기해서 본적이 있었는데 그 기억이 떠올라 수학의 정석 책을 찾아 보고 행렬이 뭔지 공부부터 했다. 알고나니 쉬운 문제였다. 

이번 문제는 딱히 설명할 것 없이 행렬의 원리대로 풀었다. 삼중포문을 쓰기 싫어서 따로 함수를 호출하는 식으로 풀었었는데 생각해보니 이게 더 안좋은것 같긴 하다. 내가 멍청했다.. 이번 문제 점수는 7점이었다.

 

 

 

public static int[][] solution(int[][] arr1, int[][] arr2) {
   	int raw = arr1.length;
  	int column = arr2[0].length;
    int[][] answer = new int[raw][column];
        
    for(int i = 0; i < raw; i++) {
       	for(int j = 0; j < column; j++) {
       		answer[i][j] = racol(arr1, arr2, i, j);
      	}
    }
    return answer;
}
	
public static int racol(int[][] arr1, int[][] arr2, int i, int j) {
   	int result = 0;
    	
   	int r = 0;
   	while(r < arr1[i].length) {
   		result += arr1[i][r] * arr2[r++][j]; 
   	}
    	
   	return result;
}
반응형

댓글