본문 바로가기
자료구조/Array

배열(Array)

by BAYABA 2020. 5. 15.

 

출처: https://blog.encrypted.gg/725?category=773649


배열은 메모리 상에 원소를 연속하게 배치한 구조입니다.

 

1. 장점

다른 자료구조와 달리 원소를 저장하는 것 이외에 추가적으로 소모되는 메모리 양이 거의 없다는 점

 

2. 단점

반드시 메모리상에 연속한 구간을 잡아야하기 때문에 할당에 다시 제약이 걸린다는 점이 단점.


배열을 사용하는 경우

 

1. 인덱스에 해당하는 원소를 빠르게 접근해야 할 때

2. 아카이브처럼 데이터를 자주 바꾸거나 확인하는 일 없이 쌓아두고 싶을 때

(만약 데이터의 삽입/삭제가 빈번한 상황이라면 배열은 비효율적)


배열연산 시간복잡도

 

1. 임의의 위치에 있는 원소를 확인/변경

: 원소가 연속하게 배치되어 있으므로, 임의의 위치의 원소를 O(1)에 확인/변경 가능

 

2. 임의의 위치에 원소를 추가

: 임의의 위치에 원소를 추가하고 나면, 그 뒤의 원소들을 전부 한 칸씩 밀어야 하므로 O(N)에 추가 가능

 

3. 임의의 위치에 원소를 제거

: 임의의 위치에 원소를 제거하고 나면, 그 뒤의 원소들을 전부 한 칸씩 당겨야 하므로 O(N)에 제거 가능

 

4. 원소를 마지막에 추가

: 배열의 길이를 알고 있으니 마지막 위치에 원소를 두기만 하면 되므로 O(1)에 추가 가능

 

5. 마지막 원소를 제거 

: 배열의 길이를 알고 있으니 마지막 원소를 O(1)에 제거 가능


굳이 한 칸씩 당기는 작업이 필요하냐고 묻는다면, 배열의 칸을 빈 채로 두게 되면,

더 이상 메모리 상에 원소가 연속해서 존재하지 않기 때문에 i번째 원소를 O(1)에 찾을 수 없습니다.