🤖Algorithm

[프로그래머스] 행렬의 덧셈 Java

Jaeyoung Kim 2022. 7. 18. 10:54
728x90

행렬의 덧셈


문제설명

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 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]]

기본코드

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = {};
        return answer;
    }
}

문제풀이

이 문제 또한 한 번에 풀이하지 못한 문제이다.

이중배열을 선언하는 명확한 방법을 알지 못했고, 배열의 값을 더하는 방법 또한 알지 못했다.

때문에 몇 번의 오류내기를 반복하였고 이로인하여 배운 부분도 많다.

 

처음 이중배열을 선언할 때, 배열 길이를 설정하지 않았었다.

arr1과 arr2의 길이가 임의로 설정될 것을 고려하여 낸 나름의 결론이었지만 이는 코드 오류가 발생되게 만들었다.

int[][] answer = new int[][];
//이렇게만 선언하고 문제 풀이를 하였더니 아래와 같은 오류코드가 출력되었다.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at Solution.solution(Unknown Source)
at SolutionTest.lambda$main$0(Unknown Source)
at SolutionTest$SolutionRunner.run(Unknown Source)
at SolutionTest.main(Unknown Source)

//구글링 해보니 배열을 제대로 선언하지 못해 발생한 에러였다.

그 다음으로 낸 오류는 이중배열 구조를 명확하게 이해하지 못하여 발생하였다.

answer 배열의 길이를 arr1과 같게 설정하기 위하여 arr1.length를 사용하였으나 행렬에 대한 이해가 부족하여 오류가 났다.

//아래와 같이 배열 answer를 선언하였더니 일전에 작성하였던 코드와 비슷한 오류가 출력되었다.
int[][] answer = new int[arr.length][arr.length];

그림 때문에 오히려 이해하기 더 어려워진 것 같기도...

내가 저지른 실수는 행과 열의 길이가 다를 경우를 산정하지 않아서 발생한 것 같았다.

처음 선언한 [arr1.length]는 배열 answer의 행의 길이를 arr1과 동일하게 맞춰주는데에는 성공하였지만,

뒤에 열의 길이에서는 arr1의 열의 길이가 아닌 또 다시 행의 길이와 맞춰주는 문제를 범한 것이다.

 

이를 해결하기 위해 구글링을 통하여 아래와 같이 코드를 작성하였고, 이를 바탕으로 문제 풀이에 성공하였다.


Solution.java

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] 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;
    }
}

어렵지 않은 문제였지만 여러 실수를 범했고 그 덕에 많이 배울 수 있는 유익한 문제였다.

728x90