본문 바로가기

Algorithm

행렬 덧셈

문제 : 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