list를 통해 구현.예시
- 파이썬:
arr = [1, 2, 3]- C:
int arr[5] = {1,2,3,4,5};
| 특징 | 설명 |
|---|---|
| 인덱스(index) | 배열의 각 요소를 식별하는 번호. 0부터 시작 |
| 연속된 메모리 | 배열은 메모리상에 연속적으로 저장됨 |
| 빠른 접근 | 인덱스를 이용해 O(1) 시간에 원소에 접근 가능 |
| 삽입/삭제 비용 | 중간에 데이터를 추가하거나 삭제하면 뒤의 값을 전부 옮겨야 해서 O(N) 시간이 걸림 |
arr[0]은 메모리 주소 1000부터 4바이트 차지,arr[1]은 1004부터 4바이트arr[i] # 평균 O(1)
list의 insert() 메서드도 내부적으로 동일 원리| 연산 | 평균 시간 복잡도 | 설명 |
|---|---|---|
| 인덱스 접근 | O(1) | 배열의 장점 중 하나 |
| 탐색 | O(N) | 정렬 상태면 이진 탐색으로 O(log N) 가능 |
| 삽입 | O(N) | 중간 삽입 시 요소 이동 필요 |
| 삭제 | O(N) | 중간 삭제 시 요소 이동 필요 |
arr = [10, 20, 30]
print(arr[0]) # 출력: 10
arr[0] → 배열의 첫 번째 요소arr[1] → 두 번째 요소print(len(arr)) # 출력: 3
arr[1] = 50
print(arr) # 출력: [10, 50, 30]
def insert_at(arr, index, value): """index 위치에 value를 삽입""" new_arr = [] for i in range(len(arr)): # ✅ 내장함수 사용: len() if i == index: new_arr.append(value) # ✅ 내장함수 사용: append() new_arr.append(arr[i]) # ✅ 내장함수 사용: append() return new_arr arr = [10, 20, 30] arr = insert_at(arr, 1, 15) print(arr) # 출력: [10, 15, 20, 30]C언어에서는
len()배열 길이는 직접 변수로 관리하거나 문자열의 경우\0만날 때까지 순회append()배열의 크기를 관리하면서 직접 인덱스 위치에 삽입해야 함
def delete_at(arr, index): """index 위치의 요소를 삭제""" new_arr = [] for i in range(len(arr)): # ✅ 내장함수 사용: len() if i != index: new_arr.append(arr[i]) # ✅ 내장함수 사용: append() return new_arr arr = [10, 15, 20, 30] arr = delete_at(arr, 2) print(arr) # 출력: [10, 15, 30]C언어에서는
len()직접 배열 길이를 세거나, 고정 길이로 선언append()없이i번째 값을i-1에 복사하는 방식으로 직접 이동시켜야 함
def find_value(arr, target): """target 값이 배열에 있는지 확인하고 위치 반환""" for i in range(len(arr)): # ✅ 내장함수 사용: len() if arr[i] == target: return i return -1 arr = [10, 20, 30] print(find_value(arr, 30)) # 출력: 2C언어에서도 동일하게 for문으로 순회하며 구현 가능
| 함수 | 설명 | 예시 |
|---|---|---|
len(arr) | 배열의 길이(요소 개수)를 반환 | len([1,2,3]) → 3 |
append(x) | 배열 맨 뒤에 x를 추가 | arr.append(10) |
insert(i, x) | i번 인덱스에 x 삽입 | arr.insert(2, 99) |
pop(i) | i번 인덱스 요소 제거 및 반환 (없으면 맨 뒤 제거) | arr.pop(1) |
remove(x) | x값을 가진 첫 번째 요소 제거 | arr.remove(10) |
index(x) | x의 위치(인덱스) 반환 | arr.index(20) |
sort() | 배열을 오름차순 정렬 (원본 수정) | arr.sort() |
reverse() | 배열을 뒤집음 | arr.reverse() |
| 문제 유형 | 설명 |
|---|---|
| 최댓값/최솟값 찾기 | 배열 전체를 순회하며 비교 |
| 누적합 (Prefix Sum) | 부분 합을 미리 계산해 빠르게 처리 |
| 정렬 | 배열 정렬 후 탐색 또는 조건 비교 |
| 슬라이딩 윈도우 | 연속된 부분 배열 처리에 유용 |