[C#] 행렬의 곱셈
2020. 8. 12. 18:00ㆍ[C#] 코딩테스트 문제풀이
반응형
프로그래머스 문제 (Level 2)
문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
내 풀이
using System;
public class Solution {
public int[,] solution(int[,] arr1, int[,] arr2)
{
int[,] answer = new int[arr1.GetLength(0),arr2.GetLength(1)];
if(arr1.GetLength(1)==arr2.GetLength(0))//이문제에선 필요없지만 필수조건
{
for (int i=0;i<arr1.GetLength(0);i++)
{
for (int j=0;j<arr1.GetLength(1);j++)
{
for (int k = 0; k < arr2.GetLength(1); k++)
{
answer[i, k] += arr1[i, j] * arr2[j, k];
}
}
}
}
return answer;
}
}
느낀점: 사실 대학 이산수학 시간에 배워, 행렬의 개념에 대해서 잘 알고 있었다. 하지만 코딩테스트에서 알고 있는 개념을 적용하는 것은
또 다른 문제였다.
우선 행렬의 곱이 성립되기 위해서는
첫번째 행렬의 열의 수와 두번째 행렬이 행의 수가 같아야 한다 - if(arr1.GetLength(1)==arr2.GetLength(0))
(이 문제에선 테스트 케이스를 위 조건에 맞는 수만 적어줘서 필요없는 if문이지만 정리하기 위해 적어둠)
조건을 만족했다면
1. 먼저 arr1의 모든 행을 기준으로 arr2의 모든 열에 대해서 회전해야 한다.
2. arr2의 1개 열을 처리할 때 해당 열의 모든 행을 회전해야 한다.
3. 2를 수행하면서 arr1과 arr2를 곱하고 더해간다.
반응형
'[C#] 코딩테스트 문제풀이' 카테고리의 다른 글
[C#]최솟값 만들기 (0) | 2020.08.31 |
---|---|
[C#]피보나치 수 (0) | 2020.08.28 |
[C#] JadenCase 문자열 만들기 (0) | 2020.08.12 |
[C#]N개의 최소 공배수 (2) | 2020.08.11 |
[C#] 소수 만들기 (0) | 2020.08.10 |