기본 틀 :
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[][] (가변 배열) |
크기 | 고정 크기 | 가변 크기 (각 행의 크기 다름) |
메모리 할당 | 연속적인 메모리 공간 | 비연속적인 메모리 공간 (각 행이 독립적) |
배열의 크기 변경 | 불가능 | 각 행의 크기를 동적으로 변경 가능 |
성능 | 빠르고 효율적 | 메모리 비효율적, 성능 저하 가능 |
사용 용도 | 고정된 크기, 고정된 데이터 구조에 적합 | 유동적인 크기와 형태의 데이터에 적합 |
로 성능적은 부분에서는 고정 배열이 메모리 공간을 연속적으로 가져 좋지만,
유동적인 크기와 형태를 가지는 배열에서는 가변 배열이 적합한 경우가 존재할 수 있다는 점을 알게 됐다.
'문제 풀기 > C#' 카테고리의 다른 글
39. 최대공약수와 최소공배수 (0) | 2025.01.22 |
---|---|
38. 직사각형 별찍기 (0) | 2025.01.22 |
36. 부족한 금액 계산하기 (0) | 2025.01.21 |
35. (중요)문자열 다루기 기본(원하는 타입.TryParse(~~~, out)) (0) | 2025.01.21 |
34. 문자열 내림차순으로 배치하기(문자열.ToCharArray(), Array.Sort(), Array.Reverse()) (0) | 2025.01.20 |