-
C# 프로그래머스 Lv2 행렬의 곱셈코딩테스트 2020. 8. 19. 16:46
- 행렬의 곱셈
-
darklight
sublimevimemacs
C#
문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
입출력 예
arr1 arr2 return
[[1, 4], [3, 2], [4, 1]] [[3, 3], [3, 3]] [[15, 15], [15, 15], [15, 15]] [[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]]
풀이
행렬의 곱셈은 두 행렬
arr1 의 가로 크기 = 결과 행렬의 가로크기
arr2 의 세로 크기 = 결과 행렬의 세로크기
을 바탕으로 결과 행렬의 가로 세로 크기 결정
int row = arr1.Length / arr1.GetLength(1);//행 int col = arr2.Length / (arr2.Length / arr2.GetLength(1));//열 int[,] answer=new int[row,col];
2차원 행렬 row와 col에 대한 2중 for문에서
하나의 반복문을 더 돌린다.
위와 같은 순서로 곱셈을 진행하기 위해서 임의의 변수 m이 arr2의 행의 개수만큼 반복하는데 이 m은
arr1에서는 0,0에에서 0,1로 가야하니 y축에 m을 넣고 arr2에서는 0,0에서 1,0으로 가야하니 x축에 m을 넣는다.
곱하여 누적한 값은 결과 행렬에 각각 저장된다.
using System; public class Solution { public int[,] solution(int[,] arr1, int[,] arr2) { int row = arr1.Length / arr1.GetLength(1);//행 int col = arr2.Length / (arr2.Length / arr2.GetLength(1));//열 int[,] answer=new int[row,col]; for(int i=0;i<row;i++) { for(int j=0;j<col;j++) { int m = 0; while(m<arr2.GetLength(0)) { answer[i, j] += arr1[i, m] * arr2[m, j]; m++; } } } return answer; } }
'코딩테스트' 카테고리의 다른 글
C# 프로그래머스 Lv2 다음 큰 숫자 (0) 2020.08.19 C# 프로그래머스 Lv2 최솟값 만들기 (0) 2020.08.19 C# 프로그래머스 Lv2 JadenCase 문자열 만들기 (0) 2020.08.19 C# 프로그래머스 Lv2 카펫 (0) 2020.08.19 C# 프로그래머스 Lv2 가장 큰 수 (0) 2020.08.19