TIL/kotlin 알고리즘

kotlin 프로그래머스 lv2 행렬의 곱셈

crablo 2024. 3. 12. 10:36
728x90

해당 문제는 행렬의 곱셈을 반환하는 문제이다.

 행렬A(a*b) 행렬B(c*d) 두 행렬을 곱하면

a*d 크기의 행렬이 완성된다.  (a:행  b:열  c:행  d:열)

이때  b열과 c행의 크기가 같아야하며,

다르면 계산할수 없다.

문제에서는 arr1행렬과 arr2행렬이 주어진다.

나는 먼저 arr1행렬의 행과열을 구하면 arr2의 행과 열은

일단, arr2의 행은 arr1행렬의 열과 크기가 같다.

그래서 간단히  arr1의 행과 열 그리고 arr2의 열을 변수에 담기로 결정했다.

 

그리고 arr1의 열과 arr2의 행의 크기가 같지 않다면 예외처리를 했다.

마지막으로 새로운 행렬을 담기위한 배열을 초기화해줬다.

그 후 for문을 이용해서 result 배열을 채워줬다.

 

 

1. 의도 및 이유:
행렬 곱셈은 각 원소를 적절히 조합하여 새로운 행렬을 생성하는 기본적인 선형대수 연산이다.
코드에서 예외처리를하여 입력 행렬이 행렬 곱셈이 가능한지 여부를 확인하고, 가능하지 않으면 예외를 발생시켰다.


2. 코드 동작 로직:
arr1의 행과 열을 변수 rowsA와 colsA에 각각담고 arr2의 행과 열은 행의경우 arr1의 열과 같아야지만 연산이 되기에 따로만들지 않고, colsB라는 변수에 담아 주었다.
예외처리를 통해 두번째 행렬arr2의 행 수와 arr1의 열 수가 일치하지 않을때 IllegalArgumentException을 발생시켰다.
마지막으로 중첩루프를통해 각 결과 행렬의 원소를 계산하고, 최종적으로 새로운 행렬을 반환한다.

3. 버그 또는 에러 및 해결:
예외처리를 통해 잘못된 크기의 행렬이 들어오면 IllegalArgumentException을 발생시킨다.
결과적으로 행렬 곱셈이 가능한 경우에만 실행되도록 설계되었고, 행렬의 크기가 일치하지 않으면 오류가 감지된다.
728x90