문제 풀기/C#

37. 행렬의 덧셈(고정 다차원 배열, 가변 다차원 배열)

kagan-draca 2025. 1. 21. 14:26

기본 틀 :

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

 

제출한 코드 :

 

using System.Linq;

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

 

 

C#에는 배열이 2가지 존재한다는 사실을 알게 됐다...

 

- 고정 배열(int[,] array = new int[길이 값, 길이 값])

- 가변 배열(int[][] array = new int[길이 값][], 향후 array[index] = new int[길이 값])

 

- 고정 다차원 배열은

배열의 크기가 컴파일 타임에 정해지며, 배열의 각 차원도 고정되어 있다.

 

int[,] fixedArray = new int[2, 3]; // 2x3 크기의 2D 고정 배열
fixedArray[0, 0] = 1;  // 첫 번째 행 첫 번째 열
fixedArray[1, 2] = 5;  // 두 번째 행 세 번째 열

Console.WriteLine(fixedArray[0, 0]); // 출력: 1
Console.WriteLine(fixedArray[1, 2]); // 출력: 5

 

그래서 변수 선언과 동시에 차원의 크기를 모두 지정해줘야 한다는 규칙이 존재했다.

 

또한, 차원의 깊이를 알고 싶다면

 

int[,] fixedArray = new int[3, 4];  // 3행 4열 크기의 고정 배열

Console.WriteLine("차원 수 (Rank): " + fixedArray.Rank);  // 출력: 2

 

변수명.Rank 를 사용해 차원의 깊이를 알 수 있었고,

 

특정 차원의 길이를 가져오기 위해서는

 

int[,] fixedArray = new int[3, 4];  // 3행 4열 크기의 고정 배열

Console.WriteLine("첫 번째 차원(행)의 길이: " + fixedArray.GetLength(0));  // 출력: 3
Console.WriteLine("두 번째 차원(열)의 길이: " + fixedArray.GetLength(1));  // 출력: 4

 

변수명.GetLength(찾고자 하는 차원 값)으로 특정 차원의 길이를 알 수 있었다.

 

- 가변 다차원 배열은

가변적인 크기를 가지는 다차원 배열로,각 행이 별도의 배열로 취급되며, 행의 크기도 동적으로 변경 가능합니다.

 

int[][] jaggedArray = new int[2][];  // 2개의 행을 갖는 배열을 생성
jaggedArray[0] = new int[3];  // 첫 번째 행에 3개의 요소를 할당
jaggedArray[1] = new int[2];  // 두 번째 행에 2개의 요소를 할당

jaggedArray[0][0] = 1;  // 첫 번째 행 첫 번째 열
jaggedArray[1][1] = 5;  // 두 번째 행 두 번째 열

Console.WriteLine(jaggedArray[0][0]); // 출력: 1
Console.WriteLine(jaggedArray[1][1]); // 출력: 5

 

가변 다차원 배열에서는 차원의 깊이나, 각 차원의 길이를 구하고자 한다면

 

int[][] jaggedArray = new int[3][];  // 3개의 행을 갖는 가변 배열
jaggedArray[0] = new int[2];  // 첫 번째 행 크기 2
jaggedArray[1] = new int[4];  // 두 번째 행 크기 4
jaggedArray[2] = new int[3];  // 세 번째 행 크기 3

Console.WriteLine("차원 수: 2");  // 'int[][]'는 2차원 배열이지만, 다차원 배열로 다뤄지지 않음
Console.WriteLine("첫 번째 차원(행)의 길이: " + jaggedArray.Length);  // 출력: 3
Console.WriteLine("첫 번째 행의 길이: " + jaggedArray[0].Length);  // 출력: 2
Console.WriteLine("두 번째 행의 길이: " + jaggedArray[1].Length);  // 출력: 4
Console.WriteLine("세 번째 행의 길이: " + jaggedArray[2].Length);  // 출력: 3

 

변수명.Length로 차원의 깊이와 변수명[index].Length로 각 차원의 길이를 구할 수 있었다.

 

- 두 배열의 성능

특징 int[,] (고정 배열) int[][] (가변 배열)
크기 고정 크기 가변 크기 (각 행의 크기 다름)
메모리 할당 연속적인 메모리 공간 비연속적인 메모리 공간 (각 행이 독립적)
배열의 크기 변경 불가능 각 행의 크기를 동적으로 변경 가능
성능 빠르고 효율적 메모리 비효율적, 성능 저하 가능
사용 용도 고정된 크기, 고정된 데이터 구조에 적합 유동적인 크기와 형태의 데이터에 적합

 

로 성능적은 부분에서는 고정 배열이 메모리 공간을 연속적으로 가져 좋지만,

 

유동적인 크기와 형태를 가지는 배열에서는 가변 배열이 적합한 경우가 존재할 수 있다는 점을 알게 됐다.