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. 주어진 정수 배열에서 가장 자주 등장하는 숫자(최빈값)를 찾는 프로그램을 작성하세요.

 참고자료