CodeGym /행동 /C# SELF /2차원 배열

2차원 배열

C# SELF
레벨 7 , 레슨 4
사용 가능

1. 소개

일반 배열을 피자 박스처럼 길게 생각해봐. 모든 조각이 한 줄로 쭉 놓여 있지 — 맛있긴 한데 좀 단조롭지.

이제 작업 스케줄이나 체스판을 상상해봐. 거긴 이미 모든 게 로 정리되어 있어 — 즉 테이블이지. 이게 바로 2차원 배열이 필요한 고전적인 상황이야.

실생활에서 2차원 배열은 진짜 자주 나와:

  • 직원 급여표 (행 — 직원, 열 — 월).
  • 화면의 그림 (각 "칸" — 픽셀 색상, 두 개의 좌표: X와 Y).
  • 행렬 계산과 데이터 처리.
  • 체스판이나 틱택토 게임판.

가끔 2차원 배열을 행렬이라고도 해 (이건 수학에서 온 말이야).

프로그래머로서 2차원 배열이 필요한 곳은 진짜 많아. 거의 모든 보드게임을 구현할 때 2차원 배열이 바로 필요하지: "체스", "체커", "틱택토", "배틀쉽":

2차원 배열 2

"체스"나 "배틀쉽"의 게임판은 2차원 배열에 딱 맞아. 칸의 좌표로 숫자만 쓰면 되거든. "폰 e2 → e4"가 아니라 "폰 (4,1) → (4,3)" 이런 식이지. 프로그래머 입장에선 이게 훨씬 편해.

2. 2차원 배열 선언 문법

처음 선언할 때만 좀 무서울 뿐이야! 하나씩 같이 보자.

일반 규칙

타입[,] 배열이름;
2차원 배열 선언

여기서 괄호 안의 쉼표 ,는 컴파일러가 커피 마시고 실수한 게 아니라, 배열이 2차원이라는 표시야.

예시

int[,] matrix;
double[,] gradesTable;
string[,] chessBoard;

배열 만들기

크기를 정해줘: 의 개수.

matrix = new int[3, 4]; // 3행, 4열

이건 3x4 표야: 엑셀에서 3행 4열짜리 표를 생각해봐.

변수 선언과 동시에 2차원 배열을 만들 수도 있어:

int[,] matrix = new int[3, 4];

값을 바로 넣어서 초기화할 수도 있어 (1차원 배열이랑 비슷하게):

int[,] example = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
// 3행 3열 표
2차원 배열 값으로 초기화하기

중요: 이렇게 초기화할 땐 모든 행의 길이가 같아야 해. 첫 번째 행에 3개, 두 번째 행에 2개 이런 건 안 돼.

시각적 도식

┌─────┬─────┬─────┬─────┐
│  0  │  1  │  2  │  3  │  ← 열 (Columns)
├─────┼─────┼─────┼─────┤
│ 0,0 │0,1  │0,2  │0,3  │  ← 행 0 (Row 0)
├─────┼─────┼─────┼─────┤
│ 1,0 │1,1  │1,2  │1,3  │  ← 행 1 (Row 1)
├─────┼─────┼─────┼─────┤
│ 2,0 │2,1  │2,2  │2,3  │  ← 행 2 (Row 2)
└─────┴─────┴─────┴─────┘

각 요소는 [행, 열] 인덱스 쌍으로 지정해.

3. 인덱싱과 요소 접근

2차원 배열에서 요소에 접근하려면 인덱스 두 개를 써야 해:

  • 첫 번째 — 행 번호
  • 두 번째 — 열 번호

matrix[1, 2] = 99;  // 두 번째 행(인덱스 1), 세 번째 열(인덱스 2)
2차원 배열 요소에 값 할당하기

체스에 익숙하다면, 인덱스는 0부터 시작한다는 걸 기억해. 즉, 첫 번째 요소는 [0, 0]이야.

쓰기와 읽기

int[,] data = new int[5, 2];
data[1, 1] = 5;         // 쓰기
int value = data[1, 1]; // 읽기

이게 메모리에서 어떻게 보일지:

2차원 배열

4. 2차원 배열 채우기

1부터 12까지 순서대로 숫자를 넣어서 행렬을 채우는 코드를 써보자. 어떻게 동작하는지 바로 알 수 있을 거야.

int[,] matrix = new int[3, 4];
int value = 1;

for (int row = 0; row < 3; row++)
{
    for (int col = 0; col < 4; col++)
    {
        matrix[row, col] = value;
        value++;
    }
}
2차원 배열을 순서대로 숫자로 채우기

여기서 바깥 for문은 을, 안쪽 for문은 을 돈다.

그림으로 보면:

실행 후:
┌────┬────┬────┬────┐
│ 1  │ 2  │ 3  │ 4  │
├────┼────┼────┼────┤
│ 5  │ 6  │ 7  │ 8  │
├────┼────┼────┼────┤
│ 9  │10  │11  │12  │
└────┴────┴────┴────┘

5. 크기: 행과 열 개수 구하기

배열 크기를 "실행 중"에 알아야 할 때가 많아. C#에서는 GetLength() 메서드가 있어서 편해.

int[,] matrix = new int[3, 4];

int rows = matrix.GetLength(0);    // 행 개수 (첫 번째 차원) - 3
int columns = matrix.GetLength(1); // 열 개수 (두 번째 차원) - 4

Console.WriteLine($"행: {rows}, 열: {columns}");
주의:

Length랑 헷갈리지 마 — 2차원 배열에서 이건 전체 요소 개수야 (행 × 열).

6. 2차원 배열 출력하기

2차원 표를 출력할 땐 보통 이중 for문을 써 — 콘솔에 미로 그리는 느낌이지. 예시:

for (int row = 0; row < matrix.GetLength(0); row++)
{
    for (int col = 0; col < matrix.GetLength(1); col++)
    {
        Console.Write(matrix[row, col] + "\t"); // "\t" — 보기 좋게 탭
    }
    Console.WriteLine(); // 줄 바꿈
}

출력 예시:

1	2	3	4	
5	6	7	8	
9	10	11	12	

이렇게 하면 코드 몇 줄로 표를 예쁘게 "그릴" 수 있다는 거, 이제 알았지!

7. 다차원 배열

그리고 배열에 대해 하나 더 재밌는 사실! 2차원 배열이 된다면, 3차원 배열도 만들 수 있지 않을까?

맞아, 원하는 차수만큼 배열을 만들 수 있어. 이런 배열을 다차원 배열이라고 해.

다차원 배열 선언 방법

필요한 차원 수만큼 쉼표로 구분해서 써주면 돼:

int[,,,] matrix = new int[2, 3, 4, 5];
4차원 배열 선언

여기선 4차원 배열이야:

  • 첫 번째 좌표에 2개,
  • 두 번째에 3개,
  • 세 번째에 4개,
  • 네 번째에 5개.

메모리에서는 이런 배열이 하나의 큰 "큐브" 데이터로 연속적으로 저장돼.

요소에 접근하는 방법

모든 인덱스를 한 번에 써서 접근해:

matrix[0, 1, 2, 3] = 42;
int value = matrix[1, 2, 0, 4];
  • 인덱스는 항상 C#에서처럼 0부터 시작해.
  • 이런 배열엔 2 × 3 × 4 × 5 = 120개의 요소가 있어.

다차원 배열 실전 예시

  • 2D — 표, 체스판, 이미지.
  • 3D — 컴퓨터 그래픽의 "큐브", 과학 계산 데이터(예: 공간과 시간의 온도).
  • 4D 이상 — 잘 쓰진 않지만, 고급 수학, 시뮬레이션, 머신러닝 등에서 나와.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION