https://programmers.co.kr/learn/courses/30/lessons/12949
코딩테스트 연습 - 행렬의 곱셈
[[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]]
programmers.co.kr
<Level2 - 연습문제>
Q.
2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.
제한 조건
- 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
- 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
- 곱할 수 있는 배열만 주어집니다.
입출력 예
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] |
A.
행렬의 곱셉이라서 종나 쉬운줄알았는데 왜 막상 코드로 구현하려니까 꼬여버렸다... 완전히... 살려주세요,,,
덕분에 오랜만에 행렬 공부를 새로 다시했다...
글고 나는 진짜 3중 for문 쓰면 효율성이랑 속도에서 걸릴까봐 안쓰려고 애썼는데 써야되는거였다...!
후 눈물이 앞을 가린다.
걍 행렬 곱셈 코드 공식을 외우는 게 미래에도, 정신건강에도 좋을 것 같다.
=>> ans[i][j] += a1[i][k]*a2[k][j]; //for문 알파벳 순서는 일반화된 순서 그거 그대로!
그리고 정답배열 크기 선언할때 난 arr1과 arr2둘 중 어떤 것이 더 큰 배열인지 모르니까 두 배열의 크기를 비교해서
각각 크기를 선언했는데 그러면 안되나보당ㅎ 사실 그렇게 햇더니 제출 후 채점에서 런타임 에러가 떴당ㅎ
밑에가 그 코드임 뗴잉 쩝;
int leng1=0; //행길이
int leng2=0; //열길이
if(arr1.length>arr2.length) leng1=arr1.length;
else leng1=arr2.length;
if(arr1[0].length>arr2[0].length) leng2=arr1[0].length;
else leng2=arr2[0].length;
int[][] answer = new int[leng1][leng2]; //return배열 길이 선언
*뜬금없이 헷갈리는 이차원 배열 크기 출력*
a1배열이 {[1,1],[2,2],[3,3]}이면 크기는 a1[3][2]임 => 큰 묶음 먼저 세고 작은 묶음 세기
al[3][2]일때 이차원 배열 크기 출력 : a1.length=3 && a1[0].length=2 임! 헷갈 노...!
'알고리즘 공부 > JAVA - 프로그래머스' 카테고리의 다른 글
[프로그래머스][JAVA][W12-#5] H-Index (0) | 2021.12.05 |
---|---|
[프로그래머스][JAVA][W12-#3] 부족한 금액 계산하기 (0) | 2021.12.05 |
[프로그래머스][JAVA][W12-#2] 없는 숫자 더하기 (0) | 2021.12.05 |
[프로그래머스][JAVA][W12-#1] 다음 큰 숫자 (0) | 2021.12.05 |
[프로그래머스][JAVA][W11-#5] 땅따먹기 (0) | 2021.09.19 |