Study with book/Algorithms

[프로그래머스] 행렬의 곱셈


[행렬의 곱셈] https://programmers.co.kr/learn/courses/30/lessons/12949

행렬의 곱셈

 

 

풀고 느낀점

오랜만에 코테를 풀어서 그런지 생각보다 오래걸렸습니다.  한참 코테 문제를 풀 때 잘 안풀리면 무조건 디버그를 돌려서 차근 차근 보자라는 원칙이 있었는데 망각하고 머리속으로 계속 상상하면서 푸니까 더 오래 걸린 것 같습니다. 나중엔 결국 디버그 돌려서 풀었습니다. 갑자기 드는 생각인데 개발 툴 도움 없이는 절대 문제를 풀지 못할 것 같다는 생각이 들었습니다. 진짜 잘푸는 사람보면 툴 도움 없이 그냥 크롬에서 풀던데 그 경지는 절대 못갈 것 같습니다. 다시 일주일에 3코테 목표를 세웠습니다. 이직을 하고 나서 꽤 소홀했는데 다시 정신차려야할 것 같습니다.

/**
 * 2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
 * https://programmers.co.kr/learn/courses/30/lessons/12949
 */
public class Level2_5 {


    public static void main(String[] args) {
        Level2_5 level2_5 = new Level2_5();
        level2_5.solution(
                new int[][] {
                        {1,2,3},
                        {4,5,6}
                },
                new int[][] {
                        {1,4},
                        {2,5},
                        {3,6}
                }); // [[14, 32], [32, 77]]


        level2_5.solution(
                new int[][] {
                        {1, 4},
                        {3, 2},
                        {4, 1}
                }, new int[][]{
                        {3, 3},
                        {3, 3}
                }); // [[15,15],[15,15],[15,15]]

        level2_5.solution(
                new int[][] {
                        {2, 3, 2},
                        {4, 2, 4},
                        {3, 1, 4}
                },
                new int[][]{
                        {5, 4, 3},
                        {2, 4, 1},
                        {3, 1, 1}
                }); // [[22, 22, 11], [36, 28, 18], [29, 20, 14]]


    }

    public int[][] solution(int[][] arr1, int[][] arr2) {

        int rSize = arr1.length;
        int mSize = arr1[0].length;
        int cSize = arr2[0].length;

        int[][] answer = new int[rSize][cSize];
        for (int i = 0; i < rSize; i++) {
            for (int j = 0; j < cSize; j++) {
                int result = 0;
                for (int k = 0; k < mSize; k++) {
                    result = result + arr1[i][k] * arr2[k][j];
                }
                answer[i][j] = result;
            }
        }

        return answer;
    }
}