자료구조에서 기본적인 형태로, 동일한 타입의 데이터가 순차적으로 저장되는 구조를 말한다.
인덱스를 사용해 요소에 접근할 수 있으며, 고정된 크기를 가지거나 동적 크기를 가질 수 있다.
고정 크기 배열은 생성 시 크기가 고정되며, 이후에는 크기 변경이 불가능하다. (C, C++, Java, C#)
아래 예제는 C언어로 작성된 예제이다.
#include <stdio.h>
int main() {
// 정적 배열을 생성하고 모든 요소를 0으로 초기화
int arr[5] = {0};
// 배열에 데이터 추가
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;
// 배열의 내용 출력
printf("Array values:\n");
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
> Array values:
arr[0] = 10
arr[1] = 20
arr[2] = 30
arr[3] = 40
arr[4] = 50
arr[5]에 데이터를 추가한다면?
#include <stdio.h> int main() { arr[5] = 60; // 배열의 내용 출력 printf("Array values:\n"); for (int i = 0; i < 5; i++) { printf("arr[%d] = %d\n", i, arr[i]); } return 0; }
// 결과 Array values: arr[0] = 10 arr[1] = 20 arr[2] = 30 arr[3] = 40 arr[4] = 50
C언어에서는 정적 배열의 크기를 넘는 접근을 시도한 경우, 경고 또는 런타임 에러가 발생할 수 있다.
JavaScript/TypeScript의 배열은 동적 크기를 가지며, 요소를 추가하거나 제거할 수 있다.
아래 예제는 typescript 언어로 작성된 예제이다.
// 동적 크기 배열 생성
let dynamicArray: number[] = [];
// 요소 추가
dynamicArray.push(10); // [10]
dynamicArray.push(20); // [10, 20]
dynamicArray.push(30); // [10, 20, 30]
// 요소 제거
dynamicArray.pop(); // [10, 20]
// 요소 앞에 추가
dynamicArray.unshift(5); // [5, 10, 20]
// 요소 앞에서 제거
dynamicArray.shift(); // [10, 20]
// 요소 접근
console.log(dynamicArray[1]); // 20
// 요소 수정
dynamicArray[1] = 25;
console.log(dynamicArray); // [10, 25]
주의 !!
python에서는 리스트가 동적 배열이기 때문에 크기가 자동으로 조정되지만, 인덱스를 통해 접근할 때 범위를 벗어나면 IndexError가 발생한다.
-> 리스트의 크기가 동적으로 증가하더라도, 인덱스 접근은 여전히 현재 리스트의 범위 내에서만 가능하기 때문
시간 복잡도(Time Complexity)
알고리즘의 효율성을 측정하는 데 사용되는 개념으로, 입력 크기 n에 대한 연산 횟수를 표현한다. 이는 보통 빅오 표기법(Big O Notation)으로 표현되며, 최악의 경우 수행되는 연산 횟수를 나타낸다.
- 최상의 경우: 오메가 표기법(Big-Ω)
- 평균의 경우: 세타 표기법(Big-θ)
- 최악의 경우: 빅오 표기법(Big-O)
[참고 자료]
https://hoehen-flug.tistory.com/28
https://ssdragon.tistory.com/100