코딩테스트/Java

[Java]행렬의 덧셈

코딩로봇 2025. 3. 13. 11:04

문제

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

 

✏️ 내 풀이 

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

 

[[1,2],[2,3]] 가 테스트 케이스에 있다고 치면 [1,2] 를 첫번째 인덱스로 먼저 반복문을 돌리고 그안에 1,2 이라는 데이터를 j로 반복해 arr1 과 arr2 의 같은 인덱스 위치에 있는 것을 더한다.

 

오류가 발생했다

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)

 

오류를 읽어보니 배열의 길이가 0 인데 인덱스 0 이외의것을 찾아서 예외가 발생했다고 한다.

코드를 살펴보니 answer이라는 배열은 크기를 지정해줘야 한다는 것을 알게 되었다.

int[][] answer = new int[arr1.length][arr1[0].length];

 

이렇게 설정하면 두개의 인덱스의 크기를 모두 구할 수 있다.

 

✏️ 좋은 코드

더보기
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;
    }
}

 

✒️회고

- 리스트가 아닌 배열을 선언하고 사용할 때에는 길이가 고정적으로 설정을 해줘야 한다는 것을 기억하기.

- 단순히 내 생각에 맞춘 코드를 짜기보다 누구나 쉽게 알아볼 수 있는 코드를 작성하는 것이 중요할 것이다