프로그래머스/Lv. 1

[프로그래머스 코딩테스트] 행렬의 덧셈(Java)

Sigfriede 2023. 4. 24. 03:35

  문제 설명

  행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 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 = new int[arr1.length][arr1[0].length];
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[0].length; j++) {
                answer[i][j] = arr1[i][j] + arr2[i][j];
            }
        }
        return answer;
    }
}

  이차원 배열끼리 더하는 문제입니다. 

  바깥 for문이 arr1의 길이만큼 순회합니다. 이는 행의 자리가 될 것입니다. 안쪽 for문이 arr1의 0번 인덱스의 길이만큼 순회합니다. 이는 열의 자리가 될 것입니다. answer[i][j]에는 arr1과 arr2를 각각 더한 값을 할당합니다.

 

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int[][] answer = new int[arr1.length][arr1[0].length];
        int i = 0;
        for (int[] row: arr1) {
            int j = 0;
            for (int col: row) {
                answer[i][j] = col + arr2[i][j];
                j++;
            }
            i++;
        }
        return answer;
    }
}

  같은 문제를 for-each 방식으로 표현했습니다. answer의 값은 동일하므로 같은 방식으로 생성합니다. 다만 for-each에서 i와 j같은 변수는 사용하지 않기 때문에 임의로 생성합니다. 바깥 for문에서는 arr1을(각 행을 저장하는 row), 안쪽 for문에서는 row를(각 행에 해당하는 열을 저장하는 col) 접근합니다. arr2[i][j]에 col을 더한 값을 answer[i][j]에 할당합니다.

  바깥 for문이 한 번 순회하는 동안에 안쪽 for문은 여러 번 순회합니다. 따라서 j가 먼저 증가하고, 안쪽 for문의 순회가 끝나면 바깥 for문에서 i가 증가합니다. 이 과정을 반복하여 결과를 도출할 것입니다.