코딩테스트 연습 - 행렬의 곱셈 | 프로그래머스 스쿨 (programmers.co.kr)
풀이
핵심은 2개입니다.
📌새로 만들 배열의 크기를 정한다.
📌새로 만들 배열에 기존 배열(arr1, arr2)을 계산하여 삽입한다.
문제를 잘 보면 arr1에 arr2를 곱한 결과를 반환하는 것입니다.
우선 이차원 배열 곱하는 방법을 알아보면
arr1의 첫행 첫열의 값만 계산해 볼게요.
🔨[0] = \( [ (2*5)+(3*2)+(3*2), (2*4)+(3*4)+(2*1), (2*3)+(3*1)+(2*1) ] \) 입니다.
= \( [22, 22, 11] \)
이렇게 arr1의 각 행과 arr2의 각 열을 순회하면서 연산을 합니다.
즉, 새로운 배열의 크기는 행은 arr1의 행의 크기, 열은 arr2의 열의 크기입니다.
💣만약 테스트 풀이는 통과했는데, 채점 시 런타임 에러 및 실패가 나온다면 배열의 크기를 잘못 줘서 발생한 오류일 가능성이 높아요!
예시에는 arr1/arr2 모두 열의 수가 같은데, 열의 수를 다르게 해서 테스트 해 보면 원인을 찾을 수 있어요.
🎈테스트 케이스 추가
arr1 = [[2, 3, 2], [4, 2, 4], [3, 1, 4]]
arr2 = [[1, 2], [3, 4], [5, 6]]
Return = [[21, 28], [30, 40], [26, 34]]
테스트 케이스 추가 후에 다시 시도해 보세요. 만약 이 케이스도 통과한다면 배열의 크기를 잘못 주어서 발생한 오류는 아니고, 반복문 내에서 발생한 오류일 거예요. 그럼 연산 순서를 잘 보고 다시 풀어봐야죠...ㅎㅎ
📝풀이1
public int[][] solution(int[][] arr1, int[][] arr2) {
int[][] answer = new int[arr1.length][arr2[0].length];
for(int i=0; i<answer.length; i++) {
for(int j=0; j<answer[0].length; j++) {
for(int k=0; k<arr1[0].length; k++) {
answer[i][j] += arr1[i][k] * arr2[k][j];
}
}
}
return answer;
}
'Algorithm > Java' 카테고리의 다른 글
프로그래머스 - 양궁대회 JAVA :: 2022 KAKAO BLIND RECRUITMENT :: 92342 (0) | 2022.07.27 |
---|---|
프로그래머스 - N-Queen java :: 12952 (0) | 2022.07.22 |
프로그래머스 - 피보나치 수 java :: 모듈로 연산 (0) | 2022.07.15 |
프로그래머스 - 하노이의 탑 java (재귀/반복문) :: 12946 (0) | 2022.07.13 |
프로그래머스 - JadenCase 문자열 만들기 java :: 12951 (0) | 2022.07.12 |