티스토리 뷰

이전에 1차원 배열에 대해 설명드렸는데, 이번에는 2차원 배열에 대해 알아보겠습니다. 2차원 배열은 단일 배열보다 조금 더 복잡하지만, 그 개념을 잘 이해하면 다양한 데이터를 더 쉽게 처리할 수 있습니다.
아직 1차원 배열에 대한 개념이 정확하지 않다면 아래 글을 먼저 봐주세요
[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차원 배열을 활용해보세요.
다음에 풀어볼 문제들:
숫자 등고선
어느날 등산을하다가 길을 찾기 위해 지도를 보다가 땅의 높낮이를 표시되어 있는 등고선을 보면서 문득 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차원 배열을 직접 사용해보고, 다양한 문제를 풀면서 익숙해지세요!
'프로그래밍 > C언어 배우기' 카테고리의 다른 글
| C언어 별찍기 (2중 for문 3중 for문) (1) | 2024.09.12 |
|---|---|
| C언어 반복문 별찍기 예제 모음 (0) | 2024.09.11 |
| C언어 배우기 -11. 배열 (7) | 2024.09.04 |
| C언어 [Code up 문제] 1275 : k 제곱 구하기 반복문 문제 (정답 및 해설) (0) | 2021.01.07 |
| C언어 반복문 문제 코드업 1256 : 별 출력하기 (0) | 2020.12.18 |
- Total
- Today
- Yesterday
- 프로그래밍 추천
- C언어 배우기
- 프로그래머
- C언어기본
- 출력함수
- 개발
- 온라인 프로그래밍
- C언어
- C언어란?
- 개발환경
- include
- 프로그래밍입문
- 프로그래밍 입문
- stdio.h
- 온라인 코딩
- repl.it 사용법
- 사용법
- Repl.it
- 코딩
- 프로그래밍
- printf
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |