8. 프로그래머스 - 행렬의 곱셈 (배열)

2025. 7. 12. 12:38·코딩 테스트 준비/문제

문제 설명
2차원 행렬 arr1과 arr2가 주어졌을 때, arr1에 arr2를 곱한 결과를 반환하는 함수를 완성하세요.

제한 조건

  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 정수입니다.
  • 곱할 수 있는 형태의 배열만 입력으로 주어집니다.
    (즉, arr1의 열의 수는 arr2의 행의 수와 같습니다.)

입출력 예

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: 크기 = a×ba \times ba×b
  • arr2: 크기 = b×cb \times cb×c
  • 결과 행렬: 크기 = a×ca \times ca×c

즉, arr1의 행과 arr2의 열을 곱해서 결과의 해당 위치에 채워 넣는 방식이다.

 

핵심 로직

result[i][j] = arr1[i][0] * arr2[0][j]
             + arr1[i][1] * arr2[1][j]
             + ...
             + arr1[i][k] * arr2[k][j];

result[i][j]는 arr1의 i번째 행과 arr2의 j번째 열을 하나하나 곱해서 더한 값이다.

 

알고리즘 코드

public class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int n = arr1.length;         // arr1 행 수
        int k = arr1[0].length;      // arr1 열 수 = arr2 행 수
        int m = arr2[0].length;      // arr2 열 수

        int[][] result = new int[n][m];

        for (int i = 0; i < n; i++) {
            for (int kIdx = 0; kIdx < k; kIdx++) {
                int a = arr1[i][kIdx];
                for (int j = 0; j < m; j++) {
                    result[i][j] += a * arr2[kIdx][j];
                }
            }
        }

        return result;
    }
}

 

시간 복잡도 분석

O(n×k×m)이다.

'코딩 테스트 준비 > 문제' 카테고리의 다른 글

10. 프로그래머스 - 할인 행사(해시)  (1) 2025.07.21
10. 프로그래머스 - 완주하지 못한 선수 (해시)  (2) 2025.07.12
7. 프로그래머스 - 두 큐 합 같게 만들기(큐)  (1) 2025.07.10
6. 프로그래머스 - 다리를 지나는 트럭(큐)  (1) 2025.07.08
5. 프로그래머스 - 카드 뭉치(큐)  (1) 2025.07.07
'코딩 테스트 준비/문제' 카테고리의 다른 글
  • 10. 프로그래머스 - 할인 행사(해시)
  • 10. 프로그래머스 - 완주하지 못한 선수 (해시)
  • 7. 프로그래머스 - 두 큐 합 같게 만들기(큐)
  • 6. 프로그래머스 - 다리를 지나는 트럭(큐)
masxer
masxer
masxer 님의 블로그 입니다.
  • masxer
    masxer 님의 블로그
    masxer
  • 전체
    오늘
    어제
    • 분류 전체보기 (54)
      • 알고리즘 (7)
      • 코딩 테스트 준비 (34)
        • 문제 (28)
        • 개념 (6)
      • 25-1 여름방학 공모전 프로젝트 (0)
      • 스프링부트 (6)
      • 도커 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
masxer
8. 프로그래머스 - 행렬의 곱셈 (배열)
상단으로

티스토리툴바