안녕하세요!
오늘부터 매일매일 자료구조 한 가지씩 정리해보는 시간을 가지려고 합니다!
코딩테스트와 프로젝트를 진행하다보면 자료구조가 가끔 기억이 안나거나 헷갈리는 경우가 있더라구요😅
이참에 기본 개념부터 응용, 장단점, 자바와 파이썬 등 다양한 언어에서 어떻게 쓰이는지 쭈욱 알아보려고 합니다!
첫 시작은 가장 익숙하고, 많이 사용하는 배열입니다!
시작해볼까요?
Array - 배열은 연속된 메모리 공간에 순차적으로 저장된 동일한 타입의 데이터 모음인 자료구조입니다.
구성으로는 요소과 인덱스가 있습니다.
배열의 장단점은 상대적으로 명확해서 기억하기 쉽습니다.
빠른 접근 - 인덱스를 사용하여 배열의 요소에 빠르게 접근할 수 있습니다. 이때 걸리는 시간은 O(1)입니다. 즉, 원하는 요소의 인덱스만 알고 있다면 상수 시간에 접근할 수 있습니다.
메모리 공간 효율성 - 배열은 연속된 메모리 공간에 요소들을 저장하므로, 메모리 공간을 효율적으로 사용할 수 있습니다. 또한 추가적인 메모리 할당이 필요하지 않습니다.
크기 제한 - 배열은 생성할 때 크기를 정하기 때문에 크기를 동적으로 변경할 수 없습니다.
삽입, 삭제 어려움 - 인덱스를 통한 검색은 굉장히 빠르지만, 중간에 요소를 삽입하거나, 삭제하는 작업은 시간과 비용이 큽니다. (데이터를 한칸씩 옮기는 과정이 필요하기 때문입니다)
배열을 자바와 파이썬 코드로 직접 구현해보겠습니다!
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}
};
파이썬에서의 배열은 리스트로 불리고, 다른 언어들과 조금 다른 차이점이 있습니다.
사실 특징만 본다면 배열이라기 보단 List 자료형에 가깝습니다. (실제로 타입을 찍어보면 list라고 나옵니다)
사용하는 법도 매우 간단합니다.
#자바와 달리 길이, 자료형을 명시하지 않고 사용할 수 있습니다.
arr = []
arr2 = [1, 2, 3]
arr3 = [1, 'Stirng']
arr4 = [[1, 2, 3], [4, 5]]
#값을 추가할때는 append 메소드를 사용합니다.
arr.append(1)
arr.append(2)
자료구조의 가장 기본이라고 할 수 있는 배열에 대해서 알아봤습니다!
많이 사용되는만큼 직접 코드로 작성해보고 사용해보는 것이 큰 도움이 될 것 같습니다
앞으로 자료구조 시리즈 많관부🙌🏻🙌🏻🙌🏻
읽어주셔서 감사합니다~~!~!