icon안동민 개발노트

1차원 배열


배열의 개념

 배열은 동일한 데이터 타입의 여러 변수를 연속된 메모리 공간에 저장하는 자료구조입니다. 배열을 사용하면 관련된 데이터를 효율적으로 관리하고 처리할 수 있습니다. 예를 들어, 학생들의 점수나 일일 기온 등을 저장하고 처리할 때 유용합니다.

배열의 선언과 초기화

 배열 선언

int numbers[5];  // 정수형 배열 선언 (크기: 5)

 이 선언은 5개의 정수를 저장할 수 있는 배열을 생성합니다.

 배열 초기화

int numbers[5] = {1, 2, 3, 4, 5};  // 선언과 동시에 초기화
int scores[] = {95, 88, 76, 92, 100};  // 크기 자동 결정

 첫 번째 예는 배열을 선언하면서 동시에 초기화합니다. 두 번째 예는 초기화 값의 개수에 따라 배열의 크기가 자동으로 결정됩니다.

 부분 초기화

int partial[5] = {1, 2};  // {1, 2, 0, 0, 0}

 초기화 값이 배열 크기보다 적으면, 나머지는 0으로 초기화됩니다.

배열 요소 접근

 배열의 각 요소는 인덱스를 통해 접근할 수 있습니다. 인덱스는 0부터 시작합니다.

#include <iostream>
 
int main() {
    int numbers[5] = {10, 20, 30, 40, 50};
    std::cout << numbers[2] << std::endl;  // 출력: 30
    numbers[4] = 60;  // 배열 요소 수정
    std::cout << numbers[4] << std::endl;  // 출력: 60
    return 0;
}

배열과 메모리

 배열은 연속된 메모리 공간에 저장됩니다. 각 요소는 타입의 크기만큼의 공간을 차지합니다.

#include <iostream>
 
int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    std::cout << "배열의 크기: " << sizeof(numbers) << " bytes" << std::endl;
    std::cout << "첫 번째 요소의 주소: " << &numbers[0] << std::endl;
    std::cout << "두 번째 요소의 주소: " << &numbers[1] << std::endl;
    return 0;
}

 이 예제는 배열의 메모리 구조를 보여줍니다. 각 요소가 연속적으로 저장되어 있음을 확인할 수 있습니다.

배열과 반복문

 배열은 주로 반복문과 함께 사용됩니다.

#include <iostream>
 
int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    for (int i = 0; i < 5; i++) {
        std::cout << numbers[i] << " ";
    }
    std::cout << std::endl;
    return 0;
}

범위 기반 for 루프 (C++ 11 이상)

 C++ 11부터는 범위 기반 for 루프를 사용하여 배열의 모든 요소를 쉽게 순회할 수 있습니다.

#include <iostream>
 
int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    for (int num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    return 0;
}

배열의 크기 계산

 배열의 크기를 동적으로 계산할 때는 다음과 같은 방법을 사용합니다.

#include <iostream>
 
int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    std::cout << "배열의 크기: " << size << std::endl;
    return 0;
}

문자 배열과 문자열

 C++에서 문자열은 문자 배열로 표현될 수 있습니다.

#include <iostream>
 
int main() {
    char str[] = "Hello";  // {'H', 'e', 'l', 'l', 'o', '\0'}
    std::cout << str << std::endl;
    return 0;
}

 문자열의 끝은 널 문자 '\0'로 표시됩니다.

배열의 한계와 주의사항

  1. 크기가 컴파일 시간에 결정되어야 합니다.
  2. 범위를 벗어난 접근(배열 인덱스 오류)에 주의해야 합니다.
  3. 배열 전체를 한 번에 대입할 수 없습니다.
int a[5] = {1, 2, 3, 4, 5};
int b[5];
b = a;  // 오류: 배열 전체 대입 불가

std::array (C++ 11 이상)

 C++ 11부터는 std::array를 사용하여 더 안전하고 편리하게 배열을 다룰 수 있습니다.

#include <iostream>
#include <array>
 
int main() {
    std::array<int, 5> numbers = {1, 2, 3, 4, 5};
    std::cout << "배열의 크기: " << numbers.size() << std::endl;
    std::cout << "첫 번째 요소: " << numbers.front() << std::endl;
    std::cout << "마지막 요소: " << numbers.back() << std::endl;
    return 0;
}

연습 문제

  1. 정수 배열을 선언하고 초기화한 후, 모든 요소의 합을 계산하는 프로그램을 작성하세요.
  2. 문자 배열을 사용하여 간단한 암호화 프로그램을 구현하세요. (힌트 : 시저 암호를 사용해보세요)
  3. 배열을 사용하여 간단한 성적 관리 프로그램을 작성하세요. 학생들의 점수를 입력받고, 평균, 최고점, 최저점을 계산하여 출력하세요.
  4. 주어진 정수 배열에서 가장 자주 등장하는 숫자(최빈값)를 찾는 프로그램을 작성하세요.


참고 자료