문제 : 2개의 행렬을 입력받는 sumMatrix 함수를 완성하여 행렬 덧셈의 결과를 반환해 주세요.
단 , 어떠한 행렬에도 대응하는 함수를 완성해주세요.
ex] 1 x 3 행렬의 덧셈, 2 x 2 행렬의 덧셈, 4 x 1 행렬의 덧셈
[정리]
행렬 : 수나 식을 직사가형 모양으로 배열한 것
행 : 행렬에서 가로를 행(row)
열 : 행렬에서 세로를 열(column)
행렬의 덧셈 : 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과
[예]
※ Environment : Java
#행렬 덧셈 알고리즘 - Programmers 참조
#1
1 2 3 4 5 6 7 8 9 10 | int[][] sumMatrix(int[][] A, int[][] B) { for(int i=0; i<A.length; i++) { for(int j=0; j<A[0].length; j++) { A[i][j] += B[i][j]; } } return A; } | cs |
+ A 2차원 배열에 A + B 행렬의 더한 값을 저장
+ 다른 풀이 과정과 다르게 answer 배열을 사용 안 함
#2
1 2 3 4 5 6 7 8 9 10 11 | int[][] sumMatrix(int[][] A, int[][] B) { int[][] answer =new int[A.length][A[0].length]; for(int i=0;i<A.length;i++){ for(int j=0;j<A[i].length;j++){ answer[i][j] = A[i][j] + B[i][j]; } } return answer; } | cs |
+ 대부분의 풀이는 위와 같이 answer 2차원 배열을 "A행, A열"의 크기 만큼 초기화
+ 행렬 덧셈의 조건이 같은 크기를 가진 행렬끼리 더하는 것이기 때문에 둘 중에 하나의 행렬 크기로 초기화
#3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | int[][] sumMatrix(int[][] A, int[][] B) { int lenOut = A.length; int[][] answer = new int[lenOut][]; for(int i=0; i < lenOut; i++){ int lenIn = A[i].length; answer[i] = new int[lenIn]; for(int j=0; j < lenIn; j++){ answer[i][j] = A[i][j] + B[i][j]; } } return answer; } | cs |
+ answer 2차원 배열의 행 크기를 A행 크기로 먼저 초기화
+ 나머지 answer 2차원 배열의 열 크기는 반복문에서 초기화
#4 myself
1 2 3 4 5 6 7 8 9 | int[][] sumMatrix(int[][] A, int[][] B) { int[][] answer = A; for(int i=0 ; i < answer.length; i++) for(int j=0 ; j < answer[i].length; j++) answer[i][j] = A[i][j] + B[i][j]; return answer; } | cs |
+ answer 2차원 배열을 매개변수 A로 초기화
+ 매개변수 A 또는 B 배열의 크기와 동일한 크기가 필요하므로 A를 대입
A = { { 1, 2 }, { 3, 4 } };
B = { { 3, 4 }, { 5, 6 } };
1. i = 0, j = 0 # answer[0][0] = A[0][0] + B[0][0];
2. i = 0, j = 1 # answer[0][1] = A[0][1] + B[0][1];
3. i = 1, j = 0 # answer[1][0] = A[1][0] + B[1][0];
4. i = 1, j = 1 # answer[1][1] = A[1][1] + B[1][1];
5. Result
# answer[0][0] = 4 (1 + 3);
# answer[0][1] = 6 (2 + 4);
# answer[1][0] = 8 (3 + 5);
# answer[1][1] = 10 (4 + 6);
'Algorithm' 카테고리의 다른 글
제일 작은 수 제거하기 (0) | 2017.09.27 |
---|---|
피보나치 수열 (0) | 2017.09.26 |
최대공약수/최소공배수 (0) | 2017.09.24 |