티스토리 뷰

728x90

이전에 1차원 배열에 대해 설명드렸는데, 이번에는 2차원 배열에 대해 알아보겠습니다. 2차원 배열은 단일 배열보다 조금 더 복잡하지만, 그 개념을 잘 이해하면 다양한 데이터를 더 쉽게 처리할 수 있습니다.

아직 1차원 배열에 대한 개념이 정확하지 않다면 아래 글을 먼저 봐주세요

https://search.yahoo.com/search?fr=mcafee&type=E210KR91214G0&p=C%EC%96%B8%EC%96%B4+%EB%B0%B0%EC%9A%B0%EA%B8%B0+-11.+%EB%B0%B0%EC%97%B4

[C언어 배우기 -11. 배열 - Yahoo Search Results

Sep 5, 2022 · 안녕하세요~ 오늘은 배열에 대해서 정리해보려 합니다. C언어를 처음 배울 때 포기하게 되는 부분 중 하나인데요. 알기 쉽게 예제를 보며 공부해봅시다~ 1. 배열의 선언 아래 코드처럼

search.yahoo.com](https://search.yahoo.com/search?fr=mcafee&type=E210KR91214G0&p=C%EC%96%B8%EC%96%B4+%EB%B0%B0%EC%9A%B0%EA%B8%B0+-11.+%EB%B0%B0%EC%97%B4)


1. 2차원 배열이란?

2차원 배열은 배열 안에 배열이 있는 구조로, 행(row)과 열(column)로 데이터를 구성할 수 있습니다. 엑셀 표처럼 생각하면 쉽게 이해할 수 있습니다. 예를 들어, 학생들의 성적을 과목별로 저장할 때 2차원 배열을 사용하면, 학생과 과목에 대한 점수를 한 번에 관리할 수 있습니다.

예를 들어, 3명의 학생이 2개의 과목을 수강했다고 가정하면, 학생들의 점수를 아래와 같은 형태로 저장할 수 있습니다.

int scores[3][2] = {
    {85, 90},  // 첫 번째 학생의 점수
    {78, 82},  // 두 번째 학생의 점수
    {88, 91}   // 세 번째 학생의 점수
};

 

 

 

 

Subject 1     Subject 2
Student 1 85     90
Student 2 78     82
Student 3 88     91

 

 

 

위 코드에서 scores[3][2]는 3명의 학생이 2개의 과목에 대한 점수를 저장하는 배열입니다. scores[0][1]은 첫 번째 학생의 두 번째 과목 점수를 나타내고, scores[2][0]은 세 번째 학생의 첫 번째 과목 점수를 나타냅니다.


2. 2차원 배열 선언 및 초기화

2차원 배열은 배열의 크기를 명시하며 선언합니다. 첫 번째 크기는 행(row), 두 번째 크기는 열(column)을 나타냅니다. 선언할 때 데이터를 미리 넣어서 초기화할 수 있으며, 데이터를 나중에 채울 수도 있습니다.

배열 선언 예시:

int matrix[3][3];  // 3x3 크기의 정수형 2차원 배열 선언

배열 초기화 예시:

int matrix[3][3] = {
    {1, 2, 3},  // 첫 번째 행
    {4, 5, 6},  // 두 번째 행
    {7, 8, 9}   // 세 번째 행
};

위 코드에서 matrix는 3x3 크기의 배열로, 각 행과 열에 숫자들이 저장되어 있습니다. 이처럼 2차원 배열을 사용하면 데이터를 행과 열로 나누어 쉽게 관리할 수 있습니다.


3. 2차원 배열 요소에 접근하기

1차원 배열처럼 2차원 배열의 요소에도 인덱스를 사용해 접근할 수 있습니다. 다만, 2차원 배열은 **행(row)**과 열(column) 두 개의 인덱스를 사용합니다. 배열 요소에 접근하려면 [행 인덱스][열 인덱스] 형식을 사용합니다.

#include <stdio.h>

int main() {
    int matrix[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    // 2차원 배열의 요소에 접근하여 출력
    printf("matrix[0][0]: %d\n", matrix[0][0]);  // 첫 번째 행 첫 번째 열
    printf("matrix[1][2]: %d\n", matrix[1][2]);  // 두 번째 행 세 번째 열
    printf("matrix[2][1]: %d\n", matrix[2][1]);  // 세 번째 행 두 번째 열

    return 0;
}

출력 결과:

matrix[0][0]: 1
matrix[1][2]: 6
matrix[2][1]: 8

4. 2차원 배열을 이용한 반복문

2차원 배열은 여러 개의 데이터를 한 번에 처리할 수 있기 때문에, 반복문과 함께 사용하는 것이 매우 유용합니다. for문을 중첩해서 사용하여 2차원 배열의 모든 요소를 출력할 수 있습니다.

예시:

#include <stdio.h>

int main() {
    int matrix[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    // 2차원 배열의 모든 요소를 출력
    for (int i = 0; i < 3; i++) {         // 행을 순회
        for (int j = 0; j < 3; j++) {     // 열을 순회
            printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);
        }
    }

    return 0;
}

출력 결과:

matrix[0][0] = 1
matrix[0][1] = 2
matrix[0][2] = 3
matrix[1][0] = 4
matrix[1][1] = 5
matrix[1][2] = 6
matrix[2][0] = 7
matrix[2][1] = 8
matrix[2][2] = 9

5. 실생활에서 2차원 배열이 쓰이는 예시

2차원 배열은 여러 데이터를 구조적으로 정리할 때 매우 유용합니다. 실생활에서 2차원 배열이 사용되는 예시는 다음과 같습니다.

  • 리그 오브 레전드 매칭 시스템: 각 팀의 5명의 플레이어와 각 플레이어가 선택한 챔피언을 2차원 배열로 관리할 수 있습니다. 예를 들어, 2차원 배열 team[2][5]로 각 팀(행)과 각 플레이어(열)에 대한 정보를 저장할 수 있습니다.
  • 좌석 배치: 극장의 좌석 배치를 2차원 배열로 표현할 수 있습니다. 예를 들어, seats[10][15] 배열은 10행 15열의 좌석 배치를 나타낼 수 있습니다.

6. 2차원 배열 선언 시 주의할 점

  • 배열 크기 초과 접근: 1차원 배열과 마찬가지로, 배열 크기를 벗어난 인덱스에 접근하면 예기치 않은 값이 출력되거나, 프로그램이 충돌할 수 있습니다.
int matrix[3][3];
matrix[3][0] = 10; // 잘못된 접근, 배열 크기를 초과

위 코드는 matrix[3][0]에 접근하려고 시도하지만, 배열은 3x3 크기이므로 유효한 행은 0, 1, 2입니다.


결론

2차원 배열은 데이터를 구조적으로 관리하고 처리하는 데 매우 유용한 도구입니다. 1차원 배열보다 조금 더 복잡할 수 있지만, 반복문과 결합해 사용하면 여러 데이터를 효율적으로 다룰 수 있습니다. 배열의 크기와 인덱스 범위에 주의하면서 2차원 배열을 활용해보세요.

다음에 풀어볼 문제들:

  1. 1467: 2차원 배열 기초
  2. 1512: 좌석 배치도
 

숫자 등고선

어느날 등산을하다가 길을 찾기 위해 지도를 보다가 땅의 높낮이를 표시되어 있는 등고선을 보면서 문득 2차원 배열로 숫자등고선을 만드는 문제가 생각났다. 여러분들은 배열크기 N과 시작위

codeup.kr

 

 

[기초-배열연습] 2차원 배열 순서대로 채우기 1-8

다음과 같은 n*m 배열 구조를 출력해보자. 입력이 3 4인 경우 다음과 같이 출력한다. 10 7 4 1 11 8 5 2 12 9 6 3 입력이 4 5인 경우는 다음과 같이 출력한다. 17 13 9 5 1 18 14 10 6 2 19 15 11 7 3 20 16 12 8 4 입력이

codeup.kr

 

2차원 배열을 직접 사용해보고, 다양한 문제를 풀면서 익숙해지세요!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함
250x250