[Java] 자바 알고리즘, 프로그래머스 알고리즘 문제 "행렬의 덧셈"

행렬의 덧셈


문제 설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 

2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.


제한 조건

행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.


입출력 예

arr1

 arr2

 return

 [[1,2],[2,3]]

 [[3,4],[5,6]]

 [[4,6],[7,9]]

 [[1],[2]]

 [[3],[4]]

 [[4],[6]]


나의 풀이


1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
  public int[][] solution(int[][] arr1, int[][] arr2) {
      int[][] answer = {};
      answer = new int[arr1.length][arr1[0].length];
      for(int i =0; i<arr1.length; i++ ){
          for(int j =0; j<arr1[i].length; j++){
              answer[i][j]=arr1[i][j]+arr2[i][j];
          }
      }
      return answer;
  }
}
cs


- 기본 전제조건 자체가 arr1과 arr2의 행과 열의 크기가 같다고 하였다. 그래서 하나의 행의 길이(arr1.length)와 열의 길이(arr1[0].length)를 구해서 answer 변수에 메모리를 할당하였다.(여기서 arr1[0].length를 하는 이유는 1부터는 값이 있을수도있고 없을 수도 있기 때문이다.) 그리고나서 익숙하게 2중포문을 돌려 각각의 요소에 한번씩 arr1의 값과 arr2의 값을 더해주면 된다.


다른사람의 풀이


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
class SumMatrix {
    int[][] sumMatrix(int[][] A, int[][] B) {
    int row = Math.max(A.length, B.length);
    int col = Math.max(A[0].length, B[0].length);
        //int[][] answer = {{0, 0}, {0, 0}};
    int[][] answer = new int[row][col];
    for(int i=0; i<row ; i++){
      for(int j=0; j<col; j++){
        answer[i][j] = A[i][j] + B[i][j];
      }
    }
 
        return answer;
    }
 
    // 아래는 테스트로 출력해 보기 위한 코드입니다.
    public static void main(String[] args) {
        SumMatrix c = new SumMatrix();
        int[][] A = { { 12 }, { 23 } };
        int[][] B = { { 34 }, { 56 } };
        int[][] answer = c.sumMatrix(A, B);
        if (answer[0][0== 4 && answer[0][1== 6 && 
                answer[1][0== 7 && answer[1][1== 9) {
            System.out.println("맞았습니다. 제출을 눌러 보세요");
        } else {
            System.out.println("틀렸습니다. 수정하는게 좋겠어요");
        }
    }
}
cs


- 이분은 max메소드를 이용해서 둘중에 큰 값을 선택했는데, 애초에 매개변수로 들어올 값들은 행과 열이 같으므로 왜하는지는 모르겠으나 만약 현업에서 사용하게될 코드였다면 저런 유효성검사는 필요합니다. (하지만 input값이 정해진 이러한 알고리즘 문제라면 불필요한 요소라고 생각합니다..-> 코드의 양만 증가시키기 때문에)

다른 알고리즘은 제가 생각한것과는 크게 다르지 않은 것 같습니다.

참고로... 알고리즘에는 정답이 없습니다.. 방법이 다양하기 때문에..



댓글

Designed by JB FACTORY