[자료구조] Array - 배열

일상 회고록·2024년 7월 4일
0

자료구조 모음집

목록 보기
1/7
post-thumbnail
post-custom-banner

안녕하세요!

오늘부터 매일매일 자료구조 한 가지씩 정리해보는 시간을 가지려고 합니다!

코딩테스트와 프로젝트를 진행하다보면 자료구조가 가끔 기억이 안나거나 헷갈리는 경우가 있더라구요😅

이참에 기본 개념부터 응용, 장단점, 자바와 파이썬 등 다양한 언어에서 어떻게 쓰이는지 쭈욱 알아보려고 합니다!

첫 시작은 가장 익숙하고, 많이 사용하는 배열입니다!

시작해볼까요?

1. 개념

Array - 배열은 연속된 메모리 공간에 순차적으로 저장된 동일한 타입의 데이터 모음인 자료구조입니다.

구성으로는 요소과 인덱스가 있습니다.

  • 요소(Element) - 배열을 구성하는 각각의 값
  • 인덱스(Index) - 배열에서의 위치를 가리키는 숫자 (참고 - 인덱스는 0부터 시작합니다)

기억해야할 배열의 중요한 특징 두가지는 아래와 같습니다
  • 동일한 타입의 데이터 저장 (⚠️Python은 여러 자료형을 함께 저장할 수 있습니다)
  • 크기가 고정된 선형구조

2. 장단점

배열의 장단점은 상대적으로 명확해서 기억하기 쉽습니다.

2-1. 장점

  • 빠른 접근 - 인덱스를 사용하여 배열의 요소에 빠르게 접근할 수 있습니다. 이때 걸리는 시간은 O(1)입니다. 즉, 원하는 요소의 인덱스만 알고 있다면 상수 시간에 접근할 수 있습니다.

  • 메모리 공간 효율성 - 배열은 연속된 메모리 공간에 요소들을 저장하므로, 메모리 공간을 효율적으로 사용할 수 있습니다. 또한 추가적인 메모리 할당이 필요하지 않습니다.


2-2. 단점

  • 크기 제한 - 배열은 생성할 때 크기를 정하기 때문에 크기를 동적으로 변경할 수 없습니다.

  • 삽입, 삭제 어려움 - 인덱스를 통한 검색은 굉장히 빠르지만, 중간에 요소를 삽입하거나, 삭제하는 작업은 시간과 비용이 큽니다. (데이터를 한칸씩 옮기는 과정이 필요하기 때문입니다)


3. 구현

배열을 자바와 파이썬 코드로 직접 구현해보겠습니다!

3-1. Java

Java에서 배열을 사용하기 위해선 선언 시 배열의 길이와 저장할 데이터 타입을 지정해주어야 합니다.

만약 길이를 지정하지 않는다면 컴파일 오류가 발생합니다.

//int형 배열 선언 및 초기화

//int 타입의 데이터를 저장할 길이 5의 배열 생성 
int[] arr = new int[5];
//이차원 배열 선언 -> [[?, ?, ?], [?, ?, ?]]
int[][] multiArr = new int[2][3];

for(int idx=0; i<5; i++) {
	arr[idx] = i+1;
}

//혹은 처음부터 값을 지정하여 배열을 생성할 수 있습니다.
int[] arr2 = {1, 2, 3, 4, 5};
int[] multiArr2 = {
					{1, 2, 3},
					{4, 5, 6}
				  };

위와 같이 Java에서 배열을 선언하는 방법을 알아보았습니다.


한단계 더 응용해보자면, 다차원 배열은 반드시 가로 세로가 같은 정방 행렬이 필수는 아닙니다.

즉, 아래와 같이 다양한 길이로 선언할 수 있습니다.

// 가변 배열
int[][] arr = {
		{1, 2, 3, 4},
		{5, 6},
		{7, 8, 9}
};

3-2. Python

파이썬에서의 배열은 리스트로 불리고, 다른 언어들과 조금 다른 차이점이 있습니다.

  • 데이터의 타입이 달라도 됩니다
  • 길이가 정해져 있지 않습니다

사실 특징만 본다면 배열이라기 보단 List 자료형에 가깝습니다. (실제로 타입을 찍어보면 list라고 나옵니다)

사용하는 법도 매우 간단합니다.

#자바와 달리 길이, 자료형을 명시하지 않고 사용할 수 있습니다.
arr = []
arr2 = [1, 2, 3]
arr3 = [1, 'Stirng']
arr4 = [[1, 2, 3], [4, 5]]

#값을 추가할때는 append 메소드를 사용합니다.
arr.append(1)
arr.append(2)

자료구조의 가장 기본이라고 할 수 있는 배열에 대해서 알아봤습니다!

많이 사용되는만큼 직접 코드로 작성해보고 사용해보는 것이 큰 도움이 될 것 같습니다

앞으로 자료구조 시리즈 많관부🙌🏻🙌🏻🙌🏻

읽어주셔서 감사합니다~~!~!

profile
하고 싶은 것들이 많은 개발자입니다
post-custom-banner

0개의 댓글