https://school.programmers.co.kr/learn/courses/30/lessons/12949
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
곱할 수 있는 배열만 주어집니다.
입출력 예
풀이
행렬의 곱셈
✏️ 행렬의 곱셈의 규칙
arr1[row][common]이고 arr2[common][col]일 때
결과 행렬의 크기는 answer[row][col]
(arr1의 열 개수와 arr2의 행 개수는 항상 같아야 함)
row만큼 순회할 때 각 row값을 i라고 하고
col만큼 순회할 때 각 col값을 j라고 하고
common만큼 순회할 때 각 common값을 k라고 하면
answer[i][j] += arr1[i][k] * arr2[k][j]
풀이 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
int[][] arr1 = {{1, 4}, {3, 2}, {4, 1}};
int[][] arr2 = {{3, 3}, {3, 3}};
int row = arr1.length;
int col = arr2[0].length;
int common = arr1[0].length; // == arr2.length
// 결과 행렬의 크기: arr1 row 개수 X arr2 col 개수
int[][] answer = new int[row][col];
for (int i=0; i< row; i++) {
for (int j=0; j < col; j++) {
for (int k=0; k < common; k++) {
answer[i][j] += arr1[i][k] * arr2[k][j];
}
}
}
for (int[] arr : answer) {
System.out.println(Arrays.toString(arr));
}
}
}
제출
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int row = arr1.length;
int col = arr2[0].length;
int common = arr1[0].length; // == arr2.length
// 결과 행렬의 크기: arr1 row 개수 X arr2 col 개수
int[][] answer = new int[row][col];
for (int i=0; i< row; i++) {
for (int j=0; j < col; j++) {
for (int k=0; k < common; k++) {
answer[i][j] += arr1[i][k] * arr2[k][j];
}
}
}
return answer;
}
}
'Algorithm Solving > Java' 카테고리의 다른 글
[programmers] Java Lv.2 - 의상 (1) | 2025.01.22 |
---|---|
[programmers] Java Lv.2 - 할인 행사 (2) | 2025.01.21 |
[programmers] Java Lv.2 - n^2 배열 자르기 (0) | 2025.01.15 |
[programmers] Java Lv.2 - H-Index (0) | 2025.01.14 |
[programmers] Java Lv.2 - 연속 부분 수열 합의 개수 (0) | 2025.01.13 |