39 – 배열

배열이란 데이터 구조의 한 방식이다. 동일한 데이터형의 요소가 같은 크기로 순서대로 나열되어 있는 집합이다. 즉, 같은 이름을 사용하지만 첨자(대괄호 안에 있는 숫자. 배열의 크기를 나타낸다.)로 서로 구분되는 집단적인 데이터 저장 영역을 의미한다. 따라서 데이터마다 변수 이름을 따로 두지 않으므로 처리가 훨씬 수월하게 진행될 수 있다.

n개의 요소로 이루어진 배열 a[n]이 있다면, 선언을 할 때에는 다음과 같이 선언한다.

int a[n];

이러면 첫 번째 요소는 a[0], 두 번째 요소는 a[1], …, n 번째 요소는 a[n-1]로 나타낸다. 즉, 요소의 시작은 0부터 시작해서 n-1까지 존재하게 되는 것이다.

배열의 첨자는 보통의 경우에 따라 다르지만 최대 7개까지 사용될 수 있다. (gcc의 경우로 알고있음. 오류가 있으면 지적 부탁합니다.) 배열의 첨자가 두개가 있으면 a[n][m] 과 같은 형식으로 적고, 이러한 배열은 2차원 배열이라고 한다. 셋이 있으면 3차원 배열(a[n][m][o])이라고 한다.

배열을 이용하면 데이터마다 변수의 이름을 따로 두지 않아도 되므로 처리가 용이하다고 했다. 이것이 어떤 의미인지를 살펴보자.

예를 들어, 5명의 학생의 쪽지시험 평균을 저장하는 변수가 있다고 하자. 이를 배열을 사용하지 않으면 다음과 같이 선언하여 사용할 것이다.

int avg1, avg2, avg3, avg4, avg5;

그리고 학생 수가 증가하면 증가하는 분 만큼의 변수를 추가하여 사용할 것이고, 그만큼의 변수를 위해 수많은 선언을 해야 할 것이다. 그러나 배열을 사용하면 다음과 같이 된다.

int avg[5];

변수의 추가가 필요하다면 배열의 크기를 늘리면 되고, 그에 따른 것도 자동으로 된다.

실행문에 대한 것도 깔끔해진다. 앞의 예시처럼 있는 경우에서, 표준 입력장치인 scanf로 성적을 입력받아 저장할 때, 배열을 사용하지 않는다면 그 문장을 다음과 같이 적어야 할 것이다.

scanf(“%d”, &avg1);
scanf(“%d”, &avg2);
scanf(“%d”, &avg3);
scanf(“%d”, &avg4);
scanf(“%d”, &avg5);

출력 또한 printf문으로 이렇게 한 줄 한 줄 노가다를 해야 할 것이다. 그러나 배열을 사용하면 다음과 같이 쓸 수 있다.

for(int i=0; i < n; i++)
scanf(“%d”, &avg[i]);

상당히 문장아 간단해진 것을 볼 수 있다. 변수가 많으면 많을수록 확실히 큰 효과를 볼 수 있다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.