🔗 문제 링크
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📝 문제 설명
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
⚠️ 제한 사항
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
✨ 내 코드
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
// result[0][0] = arr[0][0] * arr2[0][0] + arr[0][1] * arr2[1][0]
// result[0][1] = arr[0][0] * arr2[0][1] + arr[0][1] * arr2[1][1]
// result[1][0] = arr[1][0] * arr2[0][0] + arr[1][1] * arr2[1][0]
// result[1][1] = arr[1][0] * arr2[0][1] + arr[1][1] * arr2[1][1]
// result[2][0] = arr[2][0] * arr2[0][0] + arr[2][1] * arr2[1][0]
// result[2][1] = arr[2][0] * arr2[0][1] + arr[2][1] * arr2[1][1]
int arr1Row = arr1.length; //3, 3
int arr1Val = arr1[0].length; //2, 3
int arr2Col = arr2[0].length; //2, 3
int arr2Val = arr2.length; //2, 3
int[][] answer = new int[arr1Row][arr2Col];
for(int i = 0; i < arr1Row; i++) { // 3
for(int j = 0; j < arr2Col; j++) { // 2
for(int k = 0; k < arr1Val; k++) { // 2
answer[i][j] += arr1[i][k] * arr2[k][j];
}
}
}
return answer;
}
}
💡 풀이
- 행렬에 특성에 맞게 답 배열의 원소 개수(i), 두번째 차원 배열의 원소 개수(j), 각 원소 값을 구하기 위한 덧셈 횟수(k)만큼 반복하는 반복문을 만든다.
- answer[i][j]에 arr1[i][k]와 arr2[k][j] 값을 더한다.
💭 회고
진짜 솔직히 알고리즘 보다는 행렬의 개념이 더 헷갈렸다.
왜냐하면 교육 과정 개편으로 배운 적이 없기 때문이다.
행렬 곱셈 방식까진 이해했는데 이를 코드로 옮기는게 어려웠다.
그래서 그냥 반복문 돌 때의 i, j, k 값을 모두 출력해 맞는 값을 이용했다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
| [Java] Lv2. 표 편집 (0) | 2025.06.01 |
|---|---|
| [Java] Lv2. 방문 길이 (1) | 2025.05.25 |
| [Java] Lv2. 실패율 (0) | 2025.05.25 |
| [Java] Lv1. 모의고사 (0) | 2025.05.25 |
| [Java] Lv1. 두 개 뽑아서 더하기 (0) | 2025.05.25 |