1 minute read


Input-1

1
2
arr1 = [[1,2],[2,3]]
arr2 = [[3,4],[5,6]]

Output-1

1
answer = [[4,6],[7,9]] // arr1 + arr2

문제 풀이

2차원 배열을 활용해 행렬의 같은 행과 같은 열의 값을 더한 행렬을 구해야 한다.
더해질 두 행렬은 행과 열의 크기가 같기에 중첩 반복문을 활용해 행과 열만큼 반복하여 더하는 방식으로 접근하자.

  • 바깥 반복문은 배열의 행(가로)만큼 반복한다.
  • 안쪽 반복문은 배열의 열(세로)만큼 반복한다.

예를들어 i가 0,1 행의 인덱스만큼 순회할 때 열의 인덱스를 접근하려면 j가 i[0 or 1].length 값이어야 한다.

한번 테스트케이스에 대입해보자.
첫번째 순회시 i가 0이면 해당 행의 값은 1이고 arr[0].length는 1이기에 둘째 행의 값은 3이다.
두번째 순회시는 같은 방식으로 2, 4 행 값이 나오게 된다.

행과 열로써 보면 아래과 같이 순회한다고 볼 수 있다.
그렇다면 같은 행과 같은 열의 값에 접근할 수 있다.

1
2
3
4
5
6
7
int[][] answer = {};
answer = arr1; // answer에 첫번째 행렬 저장
for(int i=0; i<arr1.length; i++) { // 행렬의 행만큼 순회
    for(int j=0; j<arr1[i].length; j++) { //행렬의 열만큼 순회
        answer[i][j] += arr2[i][j]; // answer에 arr1값이 있기에 arr2값을 더해줌
    } 
}

중첩 반복문으로 같은 행과 같은열을 더하여 answer에 대입하는 코드는 위와 같다.


작성코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
    public static void main(String[] args) {
        
        int[][] arr1 = {{1}, {2}};
        int[][] arr2 = {{3}, {4}};
        // int[][] arr1 = {{1,2}, {2,3}};
        // int[][] arr2 = {{3,4}, {5,6}};
        
        solution(arr1, arr2);
    }
    public static int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = {};
        answer = arr1;
        for(int i=0; i<arr1.length; i++) {
            for(int j=0; j<arr1[i].length; j++) {
                answer[i][j] += arr2[i][j];
            } 
        }        
        return answer;
    }
}

회고

  • 2차원 배열 내에서 어떻게 각 행과 열 별로(인덱스별로) 접근해야할지 다시끔 리마인드 할 수 있었던 문제였다.