[Java] 프로그래머스(level1) - 행렬의 덧셈

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