티어 : Lv. 2
정답여부 : 정답
💡문제
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
💡입출력 예

💡문제 분석 요약
- 각 입력받은 배열의 행렬의 곱셈을 구하면 되는 문제
- 행렬의 곱셈은 그림과 같이 같은색 형광팬이 같은 색깔과 수를 곱하면 되는 문제

💡알고리즘 설계
- answer 행에는 arr1 길이를 열에는 arr2길이를 지정
- 각 행과 열만큼 for문을 만들어 주고 arr1배열의 열과 arr2 배열의 행을 곱하여 answer 있는 값과 +하여 넣어줌
- 출력
💡시간복잡도
- O(n3)
💡코드
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int row = arr1.length; // 행
int col = arr2[0].length; // 열
int[][] answer = new int[row][col]; // ex answer[3][2]
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
for (int k = 0; k < arr1[0].length; k++) {
answer[i][j] += arr1[i][k] * arr2[k][j];
}
}
}
return answer;
}
}
💡 틀린 이유
틀린건 없었고 행렬의 곱셈 구하는 공식을 찾아보았다.
answer에 굳이 크기를 지정하지 않고 Array방식으로 구현하는 문제 풀이도 해보았다
💡 틀린 부분 수정 or 다른 풀이
class Solution {
public ArrayList<ArrayList<Integer>> solution(int[][] arr1, int[][] arr2) {
ArrayList<ArrayList<Integer>> answer = new ArrayList<>();
for (int i = 0; i < arr1.length; i++) {
ArrayList<Integer> row = new ArrayList<>();
for (int j = 0; j < arr2[0].length; j++) {
int sum = 0;
for (int k = 0; k < arr1[0].length; k++) {
sum += arr1[i][k] * arr2[k][j];
}
row.add(sum);
}
answer.add(row);
}
return answer;
}
}
💡 느낀점 or 기억할정보
행렬의곱셈 저번에도 풀어본거 같은데 DP방식으로 풀수 있는지 궁금하다.
'CodingTest > Programmers' 카테고리의 다른 글
[PGM]괄호 회전하기 (0) | 2024.07.08 |
---|---|
[PGM]실패율 (0) | 2024.07.03 |
[PGM]프로세스 (0) | 2024.06.10 |
[PGM]주식가격 (0) | 2024.06.07 |
[PGM]입국심사 (1) | 2024.06.07 |