1차원 배열: 값을 일렬로 담기
공식
배열이란?
배열(array) 은 같은 자료형의 값을 일렬로 늘어놓고, 번호(인덱스)로
하나씩 꺼내 쓰는 자료구조입니다. 변수 100개를 따로 만드는 대신 배열 하나로
관리할 수 있습니다.
인덱스는 0부터 시작합니다. 크기 n인 배열의 칸은 0, 1, ..., n-1입니다.
1. 선언과 입력
C++
#include <bits/stdc++.h>
using namespace std;
int a[100000]; // 충분히 크게 잡는다(전역이면 0으로 초기화됨)
int main() {
int n; cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
}
Python
n = int(input())
a = list(map(int, input().split())) # 한 줄에 n개의 수
팁(C++): 큰 배열은
main밖(전역)에 선언하면 자동으로 0으로 초기화되고
스택 오버플로도 피할 수 있습니다.
2. 순회하기
for (int i = 0; i < n; i++)
cout << a[i] << ' ';
for x in a:
print(x, end=' ')
파이썬은 값을 직접 꺼내는 for x in a가 깔끔하지만, 인덱스가 필요하면
for i in range(n): a[i] 또는 enumerate(a)를 씁니다.
3. 자주 쓰는 패턴
합 / 최댓값 / 최솟값
long long sum = 0;
int mx = a[0], mn = a[0];
for (int i = 0; i < n; i++) {
sum += a[i];
mx = max(mx, a[i]);
mn = min(mn, a[i]);
}
print(sum(a), max(a), min(a))
특정 값 세기 / 찾기 — 값의 범위가 작을 땐 "개수 세기 배열"이 강력합니다.
int cnt[10001] = {0}; // 값이 0~10000일 때
for (int i = 0; i < n; i++) cnt[a[i]]++;
4. 인덱스 범위를 벗어나면? (가장 중요)
int a[5];
a[5] = 1; // 잘못! 유효한 인덱스는 0~4
배열 범위를 벗어난 접근은 C++에서 런타임 에러나 엉뚱한 값으로 이어지고,
파이썬에서는 IndexError가 납니다. n개짜리 배열의 마지막 칸은 a[n-1]임을
항상 기억하세요.
5. 자주 하는 실수
- off-by-one —
i <= n으로 도는 바람에a[n]을 건드리는 경우. 보통i < n이 맞습니다. - 배열 크기 부족 — 입력 최대 개수보다 작게 잡아 넘침. 문제의 최댓값보다 넉넉히 잡으세요.
- 초기화 안 함(C++ 지역 배열) — 합/카운트 배열은 0으로 시작해야 합니다.
연습 팁
배열 문제를 풀 땐 인덱스가 0부터인지 1부터인지 먼저 정하고 끝까지
일관되게 쓰세요. 1번 사람을 a[1]에 넣기로 했으면 배열을 한 칸 크게 잡으면
됩니다. 섞어 쓰면 off-by-one 버그의 온상이 됩니다.