← 모든 알고리즘

배열

같은 자료형 값을 일렬로 담는 1차원 배열.

Bronze
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-onei <= n으로 도는 바람에 a[n]을 건드리는 경우. 보통 i < n이 맞습니다.
  • 배열 크기 부족 — 입력 최대 개수보다 작게 잡아 넘침. 문제의 최댓값보다 넉넉히 잡으세요.
  • 초기화 안 함(C++ 지역 배열) — 합/카운트 배열은 0으로 시작해야 합니다.

연습 팁

배열 문제를 풀 땐 인덱스가 0부터인지 1부터인지 먼저 정하고 끝까지
일관되게 쓰세요. 1번 사람을 a[1]에 넣기로 했으면 배열을 한 칸 크게 잡으면
됩니다. 섞어 쓰면 off-by-one 버그의 온상이 됩니다.