Topic 1: 배열의 기본 개념 🗺️
학습 목표
- 배열의 개념과 필요성을 이해할 수 있다
- 배열을 선언하고 초기화할 수 있다
- 배열의 인덱싱과 메모리 구조를 파악할 수 있다
배열이 필요한 순간
학생 100명의 점수를 저장한다면?
배열 없이:
// 😱 변수 100개 선언?
int score1, score2, score3, score4, score5;
// ... 95개 더...
배열로 해결:
// 😎 배열로 해결!
int scores[100]; // 100개의 점수를 한 번에!
배열은 같은 타입의 데이터를 연속된 메모리 공간에 저장하는 자료구조입니다.
배열 선언과 초기화
배열 선언 방법
// 기본 형태
타입 배열이름[크기];
// 예시
int numbers[5]; // 정수 5개를 저장할 배열
double prices[10]; // 실수 10개를 저장할 배열
char letters[26]; // 문자 26개를 저장할 배열
다양한 초기화 방법들
#include <iostream>
using namespace std;
int main() {
// 방법 1: 선언 후 개별 초기화
int arr1[3];
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30;
// 방법 2: 선언과 동시에 초기화
int arr2[3] = {10, 20, 30};
// 방법 3: 크기 자동 계산
int arr3[] = {10, 20, 30, 40, 50}; // 크기 = 5
// 방법 4: 부분 초기화 (나머지는 0)
int arr4[5] = {10, 20}; // {10, 20, 0, 0, 0}
// 방법 5: 모두 0으로 초기화
int arr5[10] = {0}; // 모든 요소가 0
return 0;
}
배열 인덱싱
배열의 각 요소는 **인덱스(번호)**로 접근합니다.
#include <iostream>
using namespace std;
int main() {
int scores[5] = {85, 90, 78, 92, 88};
// 인덱스는 0부터 시작!
cout << "첫 번째 점수: " << scores[0] << endl; // 85
cout << "세 번째 점수: " << scores[2] << endl; // 78
cout << "마지막 점수: " << scores[4] << endl; // 88
// 값 변경
scores[2] = 95;
cout << "변경된 세 번째 점수: " << scores[2] << endl; // 95
// 배열 크기 계산
int size = sizeof(scores) / sizeof(scores[0]);
cout << "배열 크기: " << size << endl; // 5
return 0;
}
인덱스의 특징
- 0부터 시작: 첫 번째 요소는 인덱스 0
- 연속성: 인덱스는 0, 1, 2, 3… 순서로 연속
- 범위: 크기가 n인 배열은 0 ~ n-1까지의 인덱스 사용
배열 사용 예제
#include <iostream>
using namespace std;
int main() {
int arr[5] = {10, 20, 30, 40, 50};
cout << "=== 배열 요소 출력 ===" << endl;
for(int i = 0; i < 5; i++) {
cout << "arr[" << i << "] = " << arr[i] << endl;
}
// 배열의 특징
cout << "\n배열은 연속된 공간에 같은 타입의 데이터를 저장합니다." << endl;
cout << "인덱스를 사용해 각 요소에 접근할 수 있습니다." << endl;
return 0;
}
배열의 구조:
인덱스: 0 1 2 3 4
값: 10 20 30 40 50
배열과 반복문
배열과 반복문은 최고의 조합입니다!
for문으로 배열 순회
#include <iostream>
using namespace std;
int main() {
int numbers[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 배열 출력
cout << "배열 요소: ";
for(int i = 0; i < 10; i++) {
cout << numbers[i] << " ";
}
cout << endl;
// 배열 합계 계산
int sum = 0;
for(int i = 0; i < 10; i++) {
sum += numbers[i];
}
cout << "합계: " << sum << endl;
// 최대값 찾기
int max = numbers[0];
for(int i = 1; i < 10; i++) {
if(numbers[i] > max) {
max = numbers[i];
}
}
cout << "최대값: " << max << endl;
return 0;
}
배열 값 수정하기
#include <iostream>
using namespace std;
int main() {
int scores[] = {85, 90, 78, 92, 88};
// 배열 출력
cout << "원래 점수: ";
for(int i = 0; i < 5; i++) {
cout << scores[i] << " ";
}
cout << endl;
// 모든 점수에 10점 보너스
cout << "10점씩 보너스 추가!" << endl;
for(int i = 0; i < 5; i++) {
scores[i] += 10;
}
// 수정된 배열 출력
cout << "보너스 후: ";
for(int i = 0; i < 5; i++) {
cout << scores[i] << " ";
}
cout << endl;
return 0;
}
배열 활용 예제
1. 배열의 합계 구하기
개념: 배열의 모든 요소를 더해서 총합을 구하는 가장 기본적인 연산입니다.
#include <iostream>
using namespace std;
int main() {
int numbers[5] = {10, 20, 30, 40, 50};
int sum = 0;
// 모든 요소를 더하기
for(int i = 0; i < 5; i++) {
sum += numbers[i];
}
cout << "배열의 합계: " << sum << endl; // 150
return 0;
}
2. 배열에서 최대값 찾기
개념: 배열의 첫 번째 값을 기준으로 하나씩 비교하며 더 큰 값을 찾아나갑니다.
#include <iostream>
using namespace std;
int main() {
int scores[5] = {85, 92, 78, 95, 88};
int max = scores[0]; // 첫 번째 값을 최대값으로 설정
// 나머지 값들과 비교
for(int i = 1; i < 5; i++) {
if(scores[i] > max) {
max = scores[i];
}
}
cout << "최대값: " << max << endl; // 95
return 0;
}
3. 배열 뒤집기 (역순 출력)
개념: 배열의 마지막 인덱스부터 첫 번째 인덱스까지 거꾸로 접근합니다.
#include <iostream>
using namespace std;
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
cout << "정순: ";
for(int i = 0; i < 5; i++) {
cout << numbers[i] << " ";
}
cout << endl;
cout << "역순: ";
for(int i = 4; i >= 0; i--) { // 마지막 인덱스부터
cout << numbers[i] << " ";
}
cout << endl;
return 0;
}
배열 사용 시 주의사항
1. 배열 범위 초과 (Out of Bounds)
// ❌ 위험한 코드
int arr[5];
arr[5] = 100; // 에러! 인덱스는 0~4만 유효
arr[-1] = 50; // 에러! 음수 인덱스 불가
// ✅ 안전한 코드
int arr[5];
for(int i = 0; i < 5; i++) { // i < 5 조건 중요!
arr[i] = i * 10;
}
2. 배열 크기는 상수여야 함
// ❌ C++에서 불가능 (일부 컴파일러는 허용)
int n;
cin >> n;
int arr[n]; // 에러! 가변 길이 배열
// ✅ 올바른 방법
const int SIZE = 100;
int arr[SIZE]; // OK!
3. 배열 초기화 누락
// ❌ 초기화하지 않은 배열 - 쓰레기값 포함
int arr[5];
cout << arr[0] << endl; // 예측 불가능한 값
// ✅ 적절한 초기화
int arr[5] = {0}; // 모든 요소를 0으로 초기화
실습 과제
기초 실습
- 10개의 정수를 입력받아 배열에 저장하고, 입력된 순서의 반대로 출력하는 프로그램을 작성해보세요.
- 학생 5명의 점수를 입력받아 평균을 구하고, 평균보다 높은 점수의 개수를 출력하는 프로그램을 작성해보세요.
심화 실습
- 5개 정수 배열에서 짝수의 개수를 세는 프로그램을 작성해보세요.
- 배열의 모든 요소를 2배로 만드는 프로그램을 작성해보세요.
핵심 포인트
- 배열: 같은 타입의 데이터를 연속된 메모리에 저장하는 자료구조
- 인덱스: 0부터 시작하는 배열 요소의 번호
- 크기: 컴파일 시점에 결정되는 고정 크기
- 초기화: 선언과 동시에 또는 개별 요소별로 가능
- 반복문: 배열 처리에 필수적인 도구
- 범위 주의: 배열 크기를 벗어나는 접근 금지
다음 토픽에서는 2차원 배열과 다차원 배열에 대해 배워보겠습니다.
✅ 배열의 기본 개념 체크리스트
Last updated on