본문 바로가기
프로그래머스 코딩테스트 문제/Level 1

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

by jyppro 2023. 8. 10.

행렬의 덧셈

이번에 다룰 문제는 "행렬의 덧셈" 입니다. 이제부터 정답률은 70%대로 내려오게 되었습니다.

 

문제 설명

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

 

시작 코드

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

 

나의 풀이

using System;

public class Solution {
    public int[,] solution(int[,] arr1, int[,] arr2) {
        int[,] answer = new int[arr1.GetLength(0),arr1.GetLength(1)];
        for(int i = 0; i < arr1.GetLength(0); i++)
        {
            for(int j = 0; j < arr1.GetLength(1); j++)
            {
                answer[i,j] = arr1[i,j] + arr2[i,j];
            }
        }
        return answer;
    }
}

 

코드 분석

int형 2차원배열 2개 arr1, arr2가 주어지며 코드가 시작됩니다. int형 2차원배열 answer에 길이를 지정해주기 위해 arr1.GetLength()를 사용합니다. 이후 2중 for문을 작성하여 첫번째 인덱스길이와 두번째 인덱스 길이만큼 돌려줍니다.

그 안에는 answer의 각 인덱스에 순서대로 arr1와 arr2의 인덱스 순서대로의 합을 넣어줍니다. 최종적으로 answer를 리턴합니다.

 

풀이 설명

이번 문제는 2차원배열을 사용하는 문제로 두가지를 살펴봐야 합니다. 2차원배열 answer에 길이를 지정해줄 때, 어차피 arr1과 arr2는 길이가 같으므로, arr1.Length가 아닌 arr1.GetLength(0), arr1.GetLength(1)로 arr1의 0번 인덱스와 1번 인덱스의 길이를 각각 지정해주는 것과, 그것을 이용하여 2중 for문을 작성하는 것입니다. 좀 더 알아보기 쉽게 입출력 예로 주어진 숫자를 적용해 보겠습니다.

 

arr1에 [[1, 2],[2, 3]], arr2에 [[3, 4],[5, 6]] 이 들어왔습니다. 각 위치에 길이를 지정해준 뒤에, 2중 for문을 돌립니다. answer[0,0]에는 arr1[0,0] + arr2[0,0]이 들어가게 됩니다. arr1[0,0]은 1, arr2[0,0]은 3입니다. 그러니 4가 answer[0,0]에 들어가게 됩니다. 계속해서 answer[0,1], answer[1,0], answer[1,1]까지 같은 작업을 반복해 줍니다. 그렇게 하면 최종적으로 answer에는 [[4, 6],[7, 9]] 가 만들어지게 됩니다. 

 

<NEXT>

오늘은 "행렬의 덧셈" 문제를 풀어보았습니다. 풀이 자체는 크게 어려운 것은 없었지만, 2차원배열의 개념과 GetLength()를 사용하는 법을 모른다면 어렵게 느껴질 수 있는 문제입니다. 다음에는 "직사각형 별찍기" 문제를 풀어보도록 하겠습니다. 감사합니다.