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