본문 바로가기
코딩 테스트

[03-1] 배열을 알아보자(Static Array)

by 너티드코오딩 2023. 11. 8.

배열(Array)은 무엇인가?

파이선에서 의도하진 않아도 가장 많이 쓰는게 array 아닐까?

np.array를 참 많이 쓰고 있다. 심지어 이미지 처리할때도 np.array를 할정도니까.

가장 기본적인 자료구조가 배열인 셈이다.

 

* 여기서는 정적 배열(Static array)을 가정하고 있다.

배열의 특성은 2개를 기억하면 된다.

1. 배열은 고정된 저장 공간을 갖는다.

2. 순차적(order)인 데이터 저장을 갖는다.

 

즉, 선언할 때 배열의 사이즈를 정하며, 순차적으로 입력된다.

int형의 경우(4byte)이기 때문에 4개의 배열은 결국 16byte이며, 순서대로 (ex. {1, 2, 3, 4}) 할당된다.

 

 

배열 입력 예시

이렇게 메모리가 비어있던 공간에 1, 2, 3, 4가 순차적으로 들어가게 된다.

4byte라고 가정했으니, 4개의 주소에 들어갈것이며 가장 작은 주소가 할당되는 것이다.

 

이게 그림으로 보니까 쉽게 이해할 수 있었다

 

이제 할당된 메모리에 주소가 있으니(ex. 0x2AB21) 이 곳을 찾아가면? 값이 나오게 되는것!

그리고 배열의 이름에도 주소가 있다. A={1, 2, 3, 4} 하면, 1,2,3,4 에도 주소가 있지만 A에도 있는것이다.(1의 주소값과 동일) 그래야 A를 찾아가는 것.

 

정리해보면

1. 메모리에 저장된 데이터를 찾으려면 주소값을 알아야 한다.

2. 배열은 첫번째 주소의 값을 갖는다.

3. 그래서 첫번째 주소값만 알고 있으면 [1], [2] 와 같은 어떤 인덱스에도 접속이 가능하다.

4. 그래서 O(1)의 시간복잡도를 갖는다.

→Random Access(Direct Access) 덕분인데, 원하는 인덱스에 가기 위해서 1번의 연산만 해도 되기 떄문이다.

시간복잡도가 정말 중요하다.

시간복잡도는 구조를 전부 학습하면 총 정리를 할 예정이다.

 

Static array 총정리

 

장점

1. 데이터의 개수가 정해져있다면 매우 효율적이다.

2. 연산이 빠르다.

 

단점

1. 만약 예상보다 많은 데이터를 담게 된다면 공간이 없어 비효율적일 수 있다.

2. 일단 크게 만들면? 메모리의 비효율이 발생한다.

 

총평

잘쓰면 빠르고 효율적인 놈인데 만들기도,,관리하기도 까다롭네?

 

'코딩 테스트' 카테고리의 다른 글

[04-1] 연결 리스트란?  (2) 2023.11.09
[03-3] 배열을 알아보자(활용편)  (3) 2023.11.09
[03-2] 배열을 알아보자(Dynamic Array)  (1) 2023.11.09
[02] 알고리즘이란?  (0) 2023.11.08
[01] 자료구조란?  (2) 2023.11.08