ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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;
        }
    }
Designed by Tistory.