Skip to main content

배열

배열(Array)의 개념

**Array(배열)**는 동일한 자료 유형의 여러 변수를 한 번에 선언하여 사용하는 자료 구조이다. Array를 선언하면, 각 원소는 동일한 크기로 메모리상에 연속적으로 저장된다. 이는 여러 세대가 하나의 건물에 모여 사는 아파트와 유사한 개념으로, 단독주택과 같은 일반 변수와 비교할 수 있다.

배열의 선언

Array의 선언은 자료형, 배열 이름, 배열 크기 세 가지 주요 요소로 구성된다.

문법: 자료형 배열이름[배열크기];

int score[10]; // int형 변수 10개를 저장할 수 있는 score 배열을 선언한다.
  • 자료형: Array에 저장될 원소의 자료형을 지정한다.
  • 배열 이름: 식별자 규칙에 따라 이름을 지정한다.
  • 배열 크기: 대괄호 [] 안에 저장할 원소의 개수를 지정한다.

배열의 원소와 첨자

  • Array Element(배열 원소): Array를 구성하는 각각의 저장 공간(항목)을 의미한다.
  • Index(첨자): Array의 각 원소에 접근하기 위해 사용하는 번호이다. C언어에서 Array의 **Index(첨자)**는 항상 0부터 시작한다. 따라서 크기가 10인 배열의 유효한 Index 범위는 0부터 9까지이다. 예를 들어, score[4]score 배열의 다섯 번째 원소를 참조한다.

배열의 초기화

**Initialization(초기화)**는 배열을 선언함과 동시에 각 원소에 초기값을 할당하는 것이다.

  1. 선언 후 개별 할당: 선언 후에 Index를 이용하여 각 원소에 값을 대입할 수 있다.

    int a[4];
    a[0] = 10;
    a[1] = 30;
  2. 선언 시 초기화: 중괄호 {}를 사용하여 선언과 동시에 값을 할당할 수 있다. 이 방법은 선언 시에만 사용할 수 있다.

    int a[4] = {10, 30, 40, 50};
    • 초기화 시 배열의 크기를 생략하면, 컴파일러가 초기값의 개수에 맞춰 크기를 자동으로 결정한다.

      int a[] = {10, 30, 40, 50};
    • 초기값의 개수가 배열의 크기보다 작으면, 나머지 원소들은 자동으로 0으로 초기화된다.

      int b[4] = {1, 3}; // b[2]와 b[3]은 0이 된다.

1차원 배열의 활용

배열의 합과 평균

for 반복문을 사용하여 배열의 모든 원소를 순회하며 합계를 구할 수 있다. 평균은 계산된 총합을 원소의 개수로 나누어 구하며, 정확한 소수점 결과를 얻기 위해 형변환(Type Casting)이 필요하다.

int grade[] = {10, 20, 33, 35, 13, 79, 45}; 
int total = 0;
int i;
for (i = 0; i < 7; i++) {
total += grade[i];
}
double avg = (double)total / 7; // 정수 나눗셈을 피하기 위해 double로 형변환

배열의 최소값 구하기

배열에서 최소값을 찾는 방법은 두 가지가 있다.

  1. 최소값 자체를 저장: 변수 min을 첫 번째 원소 data[0]으로 초기화한 후, 배열을 순회하며 min보다 작은 값을 만나면 min을 그 값으로 갱신한다.
  2. 최소값의 위치(Index)를 저장: 변수 minIndex를 0으로 초기화한 후 , 배열을 순회하며 data[i]data[minIndex]보다 작으면 minIndexi로 갱신한다.

배열의 정렬

중첩된 for 반복문을 사용하여 배열을 정렬할 수 있다. 다음은 오름차순으로 정렬하는 선택 정렬(Selection Sort)의 예시이다.

// 바깥쪽 루프는 정렬될 위치를 지정한다.
for (i = 0; i < 10; i++) {
// 안쪽 루프는 정렬되지 않은 나머지 부분에서 최소값을 찾는다.
for (j = i + 1; j < 10; j++) {
// 현재 위치(i)의 값보다 더 작은 값을 찾으면 두 값을 교환(swap)한다.
if (a[i] > a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}

다차원 배열과 문자열

2차원 배열

2차원 배열은 행(row)과 열(column)으로 구성된 테이블 형태의 배열이다. 첫 번째 크기가 행의 수를, 두 번째 크기가 열의 수를 나타낸다.

int a[2][4]; // 2행 4열의 2차원 배열 선언
a[1][2] = 10; // 2행 3열 위치의 원소에 10을 저장

문자열(String) 처리

C언어에서 **String(문자열)**은 문자의 배열로 처리되며, 문자열의 끝은 항상 Null character(널 문자) \0로 표시된다. 따라서 문자열을 저장할 배열의 크기는 실제 문자 수보다 최소 1 이상 커야 한다.

문자열을 초기화하는 방법은 다음과 같다.

  • char s[] = "C Language"; : 컴파일러가 자동으로 마지막에 \0을 추가한다.
  • char c[4] = {'a', 'b', 'c', '\0'};: 수동으로 \0을 추가해야 한다.

문자열 입출력

  • printf("%s", s);: %s

    변환 명세를 사용하여 문자열을 출력한다.

  • scanf("%s", name);: 공백 없는 문자열을 입력받는다. 첫 번째 공백 문자(space, tab, enter)가 나오기 전까지의 문자열만 저장하는 한계가 있다.

  • gets(line); / puts(line);: 공백을 포함한 한 줄 전체를 입출력할 수 있다. gets()는 입력받을 문자열을 저장하기에 충분한 크기의 배열을 인자로 받아야 한다.