Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 튜플
- 메뉴리뉴얼
- python
- 문자열
- 에라토스테네스의 체
- HashMap
- 보이어무어
- 순열
- 점프와 순간이동
- 후위 표기법
- fragment identifier
- 프로그래머스
- Stack
- 반복문
- pandas
- 동적계획법
- 쿼드압축 후 개수세기
- 완전 탐색
- 최소공배수
- dfs
- Java
- 완전탐색
- HashSet
- 어려웠던 문제
- 조합
- 알고리즘
- 규칙찾기
- 영문자 확인
- Dynamic Programming
- 2017 카카오 코드
Archives
- Today
- Total
csmoon1010의 SW 블로그
[200904] 행렬의 곱셈 - 연습문제(level2) 본문
1. 문제 이해
- 2차원 행렬 arr1과 arr2의 곱한 결과를 반환
(단, 곱할 수 있는 형태로 주어짐 : (axb) X (bxc) )
2. 전략
1) 필요한 변수 정의
- width = arr1.length = answer의 행 수
- height = arr2[0].length = answer의 열 수
- num = arr1[0].length = arr2.length = arr1과 arr2의 교차 행/열 수
2) 행렬 곱셈 : O(n3)
- arr1의 행과 arr2의 열을 선택(중첩 for문 → i, j)
- answer[i][j] = arr1[i][0]*arr2[0][j] + arr[i][1]*arr2[1][j] + . . . + arr[i][num]*arr[num][j] (for문 이용)
3. 참고 사항
1) Divide and Conquer 알고리즘 - O(n3)
- 행렬의 영역을 나눠서 계산한다.
(단, 이 경우에는 각 행렬이 모두 n X n 행렬이여야 됨)
- 각 영역에 대해 재귀연산 진행
4. 코드
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int width = arr1.length; int height = arr2[0].length; int num = arr2.length;
int[][] answer = new int[width][height];
for(int i = 0; i < width; i++){
for(int j = 0; j < height; j++){
int temp = 0;
for(int k = 0; k < num; k++){
temp += arr1[i][k] * arr2[k][j];
}
answer[i][j] = temp;
}
}
return answer;
}
}
'Coding Test > 프로그래머스' 카테고리의 다른 글
[200907] N개의 최소공배수 - 연습문제(level2) (0) | 2020.09.07 |
---|---|
[200906] JadenCase 문자열 만들기 - 연습문제(level2) (0) | 2020.09.06 |
[200904] 피보나치 수 - 연습문제(level2) (0) | 2020.09.04 |
[200901] 최솟값만들기 - 연습문제(level2) (0) | 2020.09.01 |
[200901] 최댓값과 최솟값 - 연습문제(level2) (0) | 2020.09.01 |
Comments