본문 바로가기
Programming/C, C++

LV1 C++ 배열 Array 정리

by Dev_카페인 2022. 9. 6.
반응형

 

 

[lv1/C++] 배열 Array 정리

 

배열

배열(Array)은 연속된 공간에 같은 자료형의 데이터를 모아놓은 것이다.

배열은 대부분의 프로그래밍 언어에서 사용할 수 있는 가장 기초적인 자료 구조이다.

 

배열의 선언 방법

배열의 선언 방법은 배열의 이름 뒤에 대괄호("[ ]")를 이용하여 배열의 크기를 지정한다.

배열의 크기는 연속된 공간에 들어갈 요소들의 개수를 의미하며 값이 정해져있는 상수나 식을 사용할 수 있다. (변수는 사용할 수 없다.)

배열의 각각 요소에 접근하기 위해서는 인덱스(index, 첨자)를 사용하는데 이 때 배열의 인덱스는 0부터 시작되는 숫자이다. 예를 들어서 배열의 크기를 '5'로 지정했을 때 인덱스는 0, 1, 2, 3, 4 로 5개의 공간이 만들어지는 것이다.

 

배열의 선언 및 초기화

배열은 아래와 같은 방법으로 선언 및 초기화 할 수 있다.

1. int score[5] = {50, 70, 30, 100, 10};
2. int score[5];		// 5개의 방은 0으로 초기화
3. int score[5] = {50, 70};	// 나머지 3개 방 0으로 초기화
4. int score[5] = {0};		// 모두 0으로 초기화

배열의 크기는 모두 5이며 각각 다른 방법으로 초기화를 했다.

첫 번째 방법은 각 공간에 요소들을 넣어주었으며, 두 번째 방법은 요소를 넣어주지 않아 0으로 자동 초기화가되었다. 세 번째 방법은 0, 1번 째 인덱스만 요소를 넣어주고 2, 3, 4번째 요소들은 0으로 자동 초기화가 되었다. 네 번째 방법 또한 모두 0으로 초기화 하는 방법이다.

 

배열의 접근방법

위와 같이 만들어진 배열의 각 요소 접근 방법은 score[0], score[1], score[2], score[3], score[4] 처럼 배열의 이름과 인덱스를 통해 접근할 수 있다. 첫 번째 방법으로 초기화 된 것의 각 요소를 살펴보면 score[0]공간에는 50이라는 값이 들어가 있으며 score[1]에는 70, score[2]에는 30, score[3]에는 100, score[4]에는 10이 들어가게 된다.

 

다차원 배열

현실에서 일어나는 여러가지 일들을 단순히 연속된 공간에 값을 넣고 처리하기에는 부족함이 따른다. 학생들의 과목 성적을 처리해야 하는 경우를 생각해 보자, 수학과 영어 성적을 처리할 경우 1차원 배열을 사용했을 때 한 명의 성적을 처리할 때는 2개의 공간에 나눠 넣으면 되겠지만 두명 이상일 때는 홀수를 수학 짝수를 영어로 처리하거나 다른 방법을 찾아야 할 것이다. 힘겹게 처리를 할 수 있겠지만 대부분의 프로그래밍 언어에서 다차원 배열을 지원하므로 좀 더 편리하고 직관적인 처리가 가능하다. 2차원 배열의 선언은 1차원 배열의 선언과 비슷하지만 대괄호 한 쌍이 더 추가된다. 2차원 배열로 부족하다면 대괄호를 더 추가해 다 차원 배열을 만들 수 있다.

 

 

1차원 배열

int arr[5];

2차원 배열

int arr[3][4]

3차원 배열

arr[3][4][5]
int arr[2][3][4];

3차원 배열에서 첫번째 첨자는 면(깊이)의 개수로 볼 수 있고 두 번째 첨자는 행의 개수로 볼 수 있으며 세 번째 첨자는 열의 개수로 본다.

4차원 배열부터는 쓸 일이 많지는 않겠지만 4차원 배열은 3차원 배열이 여러개인 것, 5차원 배열은 4차원 배열이 여러개인 것으로 생각하면 된다.

 

1차원, 2차원, 3차원 배열을 구현해보고 어떻게 동작되는지 확인해보자.

#include <iostream>
using namespace std;

int main()
{
	// \t 탭만큼 띄어쓰기, \n 줄바꿈
	cout << "\n\n" << "----------------------------------------------------------------------------------" << "\n\n";
	// 1차원 배열
	int arr1[5] = { 10, 20, 30, 40, 50 };

	for (int i = 0; i < 5; i++) { 
		cout << "\t arr1[" << i << "] = " << arr1[i];
	}
	cout << "\n\n" << "----------------------------------------------------------------------------------" << "\n\n";

	// 2차원 배열
	int arr2[4][5] = { 10, 20, 30, 40, 50,
					  60, 70, 80, 90, 100,
					  110, 120, 130, 140, 150,
					  160, 170, 180, 190, 200};
	// 그룹지어서 초기화 하는 방법
	// int arr2[4][5] = { {10, 20, 30, 40, 50}, {60, 70, 80, 90, 100}, {110, 120, 130, 140, 150}, {160, 170, 180, 190, 200} };

	for (int y = 0; y < 4; y++) {
		for (int x = 0; x < 5; x++) {
			cout << "\t arr2[" << y << "][" << x << "] = " << arr2[y][x];
		}
		cout << endl;	// 줄바꿈
	}
	cout << "\n\n" << "----------------------------------------------------------------------------------" << "\n\n";
	

	// 3차원 배열
	int arr3[3][4][5] = { 
			{ {10, 20, 30, 40, 50}, {60, 70, 80, 90, 100}, {110, 120, 130, 140, 150}, {160, 170, 180, 190, 200} }, 
			{ {11, 21, 31, 41, 51}, {61, 71, 81, 91, 101}, {111, 121, 131, 141, 151}, {161, 171, 181, 191, 201} },
			{ {12, 22, 32, 42, 52}, {62, 72, 82, 92, 102}, {112, 122, 132, 142, 152}, {162, 172, 182, 192, 202} }
	};

	for (int z = 0; z < 3; z++) {
		for (int y = 0; y < 4; y++) {
			for (int x = 0; x < 5; x++) {
				cout << "\t arr3[" << z << "][" << y << "][" << x << "] = " << arr3[z][y][x];
			}
			cout << endl;	// 줄바꿈
		}
		cout << "\n\n\n";
	}
	return 0;
}

반응형