행렬의 곱셈

최진훈·2022년 3월 2일
0

programmers

목록 보기
44/73

이제 레벨1의 문제를 다 풀어서 레벨2로 넘어왔다. 다시 쉬운 연습문제들을 몇 문제 풀어보자.
행렬곱셈이 어떤 구조로 돌아가는지만 다시 살펴보고 문제를 풀어야겠다.

source : https://ko.wikipedia.org/wiki/%ED%96%89%EB%A0%AC_%EA%B3%B1%EC%85%88

반복문을 몇개 이용해서 연산만 잘 해주면 될 듯하다.

  1. 연산 결과의 행의 갯수는 첫번째 행렬의 행의 갯수이고 결과의 열의 갯수는 두번째 행렬의 열의 갯수이다.
  2. 첫번째 반복문은 arr1의 행의 갯수만큼 반복한다.
  3. 두번째 반복문은 arr2의 열의 갯수만큼 반복한다.
  4. 세번째 반복문은 arr1의 원소의 갯수만큼 반복한다.
  5. 연산을 마친 행렬의 각 행을 기준으로 저장을 해서 answer에 담을 것 이기 때문에 보통의 행렬 곱셈의 순서와 다르게 arr1[i][k]*arr2[k][j]로 연산을 한다.
  6. 4번의 반복문이 끝날때마다 각 행을 저장할 new에 연산결과를 더해주고 연산결과가 담긴 temp는 0으로 초기화한다.
  7. 3번의 반복문이 끝날때마다 각 행이 저장된 newanswer에 더해주고 행의 결과가 담긴 new는 빈 배열로 초기화한다.

레고레고

맨 처음 문제에서 주어진 var answer = arrayOf<IntArray>()가 없었다면 answer의 크기를 미리 정해서 초기화해주고 반복문안에서 연산의 결과가 나오는 즉시 인덱스에 맞춰서 answer에 바로 저장해주는 방법도 있었다. 그러나 최대한 초기 문제를 안건들고 해결하려하니까 조금은 쓸데 없는 과정들이 더 필요했다.

통과!!

profile
레고레고

0개의 댓글